如何访问可以为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/