'.' null可空的运算符

gdo*_*ica 1 .net c# compiler-construction null nullable

你怎么能访问null nullable的propery HasValue
我查看了编译的代码,它不是语法糖.

为什么这不会抛出NullReferenceException:

int? x = null;
if (x.HasValue)
{...}
Run Code Online (Sandbox Code Playgroud)

Bro*_*ass 11

那是因为它是一个值类型而不是引用类型的int?Nullable<int>- 所以你永远不会得到一个 NullReferenceException.

Nullable<T>结构看起来是这样的:

public struct Nullable<T> where T : struct
{
    private readonly T value;
    private readonly bool hasValue;
    //..
}
Run Code Online (Sandbox Code Playgroud)

当你分配时null,编译器会支持一些神奇的事情(它Nullable<T>以这种方式知道并对它们进行特殊处理),它只是将该hasValue字段的字段设置为false - 然后由HasValue属性返回.