为什么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命名空间中,您必须将其导入文件中(或者更常见的是,作为项目属性/配置的一部分,为整个项目显式导入它) 。