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

本文关键字:类型 编程语言 net | 更新日期: 2023-09-27 18:10:01

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

我们知道一个概念,我们不能给值类型(如Struct, int, DateTime等)赋空值。

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

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

但是如果我们看到Nullable<T>也是struct类型,那么为什么null可以被分配而没有任何错误呢?为什么微软反驳了它自己的声明"Null不能分配给值类型"

是否有人知道这背后的原因?

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

因为Nullable<T>有编译器级别的支持;在Nullable<T>的上下文中,null本质上是一个HasValue标志为false的值,而作为一个非空值,HasValue标志为true。类似地,"提升"操作符是从定义的操作符派生出来的。同样,在装箱方面,Nullable<T>也有CLI支持:一个装箱的Nullable<T>加上falseHasValue就变成了null,而不是一个新的盒子实例。

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

人们想要可空的值类型:微软想出了一种方法来实现。