基本上,这Nullable<T>是一个结构,它解释了呼叫.HasValue永远不会抛出的东西NullReferenceException.我想知道为什么 - 给定一个没有值的可空的 - 比较null总是true,即使在使用时Object.ReferenceEquals,我认为它会返回false,因为它是一个结构.
CLR内置了特殊行为以实现这一目标吗?它可能也解释了为什么泛型结构约束不允许无效.
最
诚挚的问候,Oliver Hanappi
Jon*_*eet 19
如果你这样做:
int? x = null;
if (x == null)
Run Code Online (Sandbox Code Playgroud)
将使用HasValue.
使用Object.ReferenceEquals将首先输入值 - 并将空值转换为空引用(这确实是特殊的CLR行为).当装入可以为空的值类型时,结果是空引用或基础值类型的框.换句话说,没有可空值类型的盒装值.
可空的比较并不总是返回true.举个例子,例如:
int? n = null;
int? m = 5;
Console.WriteLine(n == null); // prints True
Console.WriteLine(m == null); // prints False
Run Code Online (Sandbox Code Playgroud)
CLR对Nullables 具有特殊的装箱行为,因此参考比较可以正常工作.本质上,Value结构的属性被装入一个object.
| 归档时间: |
|
| 查看次数: |
301 次 |
| 最近记录: |