为什么Nullable <int>不能编译但是int?没有'使用系统;'</int>

时间:2009-09-03 03:42:12

标签: c# .net compiler-construction

在.Net 2中,代码:

namespace ns
{
    class Class1
    {
        Nullable<int> a;
    }
}

不编译并给出错误:

  

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

缺少using System;,但此代码:

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

编译。

有人可以解释原因吗?

3 个答案:

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