.Net如何将Nullables设置为Null

Nullable类型被定义为struct 。 在.Net中,您不能将null赋给struct因为structs是不能用null表示的值类型( Nullable除外)。

 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如何成为规则的例外“你不能为值赋值null ?” Nullable的反编译代码没有提供关于如何发生这种情况的见解。

Nullable如何成为规则的例外“你不能为值赋值null?”

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

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

 int? x = null; 

相当于:

 int? x = new int?(); 

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

语言支持主要包括:

  • 句法糖的forms? 那么int? 相当于Nullable
  • 提升运营商
  • 改变了null含义
  • null-coalescing运算符( ?? ) – 不限于可空值类型