Nullable<T>
的定义如下:
[SerializableAttribute]
public struct Nullable<T> where T : struct, new()
约束条件
where T : struct
意味着T
只能是值类型。因此,我非常清楚我不能写成:
Nullable<string> a; //error. makes sense to me
因为
string
是引用类型而不是值类型。但我真的不明白为什么不能写。
Nullable<Nullable<int>> b; //error. but why?
为什么不允许呢?毕竟,
Nullable<int>
是一个值类型,因此它可以作为Nullablle<T>
的类型参数。当我在ideone上编译时,会出现以下错误(ideone):error CS0453: 'int?'类型必须是非可空值类型才能在泛型类型或方法'System.Nullable'中用作类型参数 Compilation failed: 1 error(s), 0 warnings
new Nullable<int>();
可以编译(产生一个值为null的int?
),尽管默认构造函数未被记录。 - BoltClock