[英]The '.' operator on null nullable
如何访问null nullable的属性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
字段设置为hasValue
然后由HasValue
属性返回。
就像BrokenGlass所说的,是int?
实际上是Nullable<T>
。
结构始终包含一个值。 通常,您不能将结构变量设置为null,但是在这种特殊情况下,您可以将其本质上设置为default(Nullable<T>)
。 这会将其内容设置为null而不是变量本身。
将Nullable<T>
设置为值时,它使用隐式运算符将Value = value
设置为新值,并且HasValue = true
。
将Nullable<T>
设置为null时,它将使结构的所有字段都为空。 对于bool
字段(例如HasValue
, null == false
。
由于Nullable<T>
变量是一种结构,因此始终可以引用该变量,因为其内容为null,而不是变量本身。
在MSDN页面struct的“备注”部分中有关于结构的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.