为什么Nullable 无法编译但是int? 没有’使用系统;’

在.Net 2中,代码:

namespace ns { class Class1 { Nullable a; } } 

不编译并给出错误:

找不到类型或命名空间名称’Nullable’(您是否缺少using指令或程序集引用?)

它缺少using System; 但是这段代码:

 namespace ns { class Class1 { int? a; } } 

编译。

有人能解释一下原因吗?

我相信int? 是别名

 System.Nullable 

由于指定了完整类型名称,因此没有理由添加using指令。

T? 语法由编译器通过直接引用类型转换为System.Nullable ,而不是通过检查范围内的using 。 你可以类似地写这个,编译器会成功:

 System.Nullable a; 

? System.Nullable是一个语言构造,而System.Nullable是一个类 – 因为它存在于System命名空间中,您必须将其导入文件中(或者更常见的是,作为项目属性/配置的一部分,为整个项目显式导入它) 。