在.Net 2中,代码:
namespace ns
{
class Class1
{
Nullable<int> a;
}
}
不编译并给出错误:
找不到类型或命名空间名称'Nullable'(您是否缺少using指令或程序集引用?)
缺少using System;
,但此代码:
namespace ns
{
class Class1
{
int? a;
}
}
编译。
有人可以解释原因吗?
答案 0 :(得分:11)
编译器通过直接引用类型将T?
语法转换为System.Nullable<T>
语法,而不是检查范围内的using
。你可以类似地写这个,编译器会成功:
System.Nullable<int> a;
答案 1 :(得分:7)
我相信int?是
的别名System.Nullable<System.Int32>
由于指定了完整类型名称,因此没有理由添加using
指令。
答案 2 :(得分:2)
? System.Nullable是一个语言构造,而System.Nullable是一个类 - 因为它存在于System命名空间中,您必须将其导入文件中(或者更常见的是,作为项目属性/配置的一部分,为整个项目显式导入它)