如何访问可以为null的可为空的属性HasValue
我查看了编译后的代码,它不是语法糖。
为什么这不会引发NullReferenceException:

int? x = null;
if (x.HasValue)
{...}

最佳答案

这是因为int?Nullable<int>的缩写,它是一种值类型,而不是引用类型-因此您永远不会得到NullReferenceException

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

public struct Nullable<T> where T : struct
{
    private readonly T value;
    private readonly bool hasValue;
    //..
}


当您分配null时,在编译器的支持下发生了一些不可思议的事情(该编译器知道Nullable<T>并以这种方式将它们视为特殊),该编译器为此实例将hasValue字段设置为false-然后由HasValue属性。

关于c# - “。”可空null上的运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8379995/

10-09 09:17