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

man*_*nji 4 .net c# compiler-construction

在.Net 2中,代码:

namespace ns
{
    class Class1
    {
        Nullable<int> a;
    }
}
Run Code Online (Sandbox Code Playgroud)

不编译并给出错误:

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

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

namespace ns
{
    class Class1
    {
        int? a;
    }
}
Run Code Online (Sandbox Code Playgroud)

编译.

有人可以解释一下原因吗?

rpe*_*ich 11

T?语法是由编译器翻译成System.Nullable<T>通过直接引用的类型,而不是通过检查using在范围上秒.你可以类似地写这个,编译器会成功:

System.Nullable<int> a;
Run Code Online (Sandbox Code Playgroud)


Cha*_*ion 7

我相信int?是别名

System.Nullable<System.Int32>
Run Code Online (Sandbox Code Playgroud)

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