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
属性返回.