Tar*_*rik 5 c# struct nullable
我试图理解这段代码中的一件事:
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());
Run Code Online (Sandbox Code Playgroud)
输出是:
x: HasValue=True, Value=5
y: HasValue=False, Value=0
Run Code Online (Sandbox Code Playgroud)
当你传递null给y我时我不明白的东西,我相信它会调用,public static implicit operator Nullable<T>(T value)但是这个方法的定义初始化了一个新的struct传递value,null但是它被赋值,但是构造函数方法不检查它是否为null所以它可以分配default(T)给value.
为什么我们甚至可以在这里为结构赋值null并且它工作正常?
你们这些我错过了什么吗?我不明白它是如何绕过null并返回默认值的.
可空代码内部定义:
相信它调用公共静态隐式运算符Nullable(T值)
不,它不需要,因为T是Int32在这种情况下,而null不是一个Int32.它只y保留变量default,这意味着对于所有字节都是的结构0.这会产生一个HasValue返回的结构false.
您无法真正传递null给结构体,但C#编译器正在将此转换为默认的初始化.
| 归档时间: |
|
| 查看次数: |
283 次 |
| 最近记录: |