.Net编程语言中的可空类型

时间:2014-06-24 12:15:21

标签: c# .net

最近在修改其中一个概念时,我遇到了一个有趣的情况,我想知道为什么会这样。

我们知道一个概念,我们无法为值类型分配空值,即StructintDateTime等。

为了分配null,我们需要可以为空的类型,即

int i应替换为Nullable<int> i = null

但是,如果我们看到Nullable<T>它也是struct类型,那么如何分配null而不说明任何错误?为什么微软反对它自己的声明“Null不能分配给价值类型”

如果有人知道背后的原因吗?

1 个答案:

答案 0 :(得分:20)

因为Nullable<T>具有编译器级支持;在null的上下文中,Nullable<T>基本上是HasValue标记false的值,其中 - 非空值的HasValue true的旗帜。同样地,&#34;解除了#34;运算符来自定义的运算符。同样地,Nullable<T>在装箱方面具有 CLI 支持:Nullable<T> HasValue false的{​​{1}}变为null,而不是{{1}}一个新的盒子实例。

基本上:这一切都归结为,因为这就是他们定义的应该如何工作

人们想要可以为空的价值类型:微软找到了实现这一目标的方法。