我试图理解这段代码中的一件事:
Nullable<Int32> x = 5;
Nullable<Int32> y = null;
Console.WriteLine("x: HasValue={0}, Value={1}", x.HasValue, x.Value);
Console.WriteLine("y: HasValue={0}, Value={1}", y.HasValue, y.GetValueOrDefault());
输出是:
x: HasValue=True, Value=5
y: HasValue=False, Value=0
null
当你传递给时我不明白的事情y
,我相信它会调用public static implicit operator Nullable<T>(T value)
,但是这个方法的定义初始化了一个新的结构传递value
,它被分配null
但是构造函数方法不检查它是否为空,所以它可以分配default(T)
给value
.
为什么我们甚至可以在这里将 null 分配给 struct 并且它工作正常?
你们能不能让我在这里错过什么?我不明白它是如何绕过null
并返回默认值的。
可空代码内部定义: