.Net如何将Nullables设置为Null

时间:2013-09-03 21:25:18

标签: c# .net null clr nullable

Nullable<T>类型定义为struct。在.Net中,您无法将null分配给struct,因为structs是无法用null表示的值类型(Nullable<T>除外) )。

int i = null; // won't compile - we all know this
int? i = null; // will compile, and I'm glad it does, and it should compile, but why?

Nullable<T>如何成为规则的例外“您无法将null分配给值类型?” Nullable<T>的反编译代码没有提供有关如何发生这种情况的见解。

1 个答案:

答案 0 :(得分:13)

  

Nullable<T>如何成为规则的例外“你不能将null分配给值类型?”

通过改变语言,基本上。 null字面值从“空引用”变为“相关类型的空值”。

在执行时,可空值类型的“空值”是HasValue属性返回false的值。所以这个:

int? x = null;

相当于:

int? x = new int?();

值得将Nullable<T>框架部分与语言和CLR方面分开。事实上,CLR本身并不需要了解可空值的类型 - 据我所知,唯一重要的方面是可空值类型的空值被装箱为空引用,你可以unbox对任何可空值类型的null值的null引用。即使这只是在.NET 2.0最终版本发布之前引入的。

语言支持主要包括:

  • ?形式的句法糖因此int?相当于Nullable<int>
  • Lifted operators
  • null
  • 的更改含义
  • null-coalescing运算符(??) - 不限于可空值类型