为什么Nullable 不匹配作为generics约束的引用类型
可能重复:
Nullable类型作为通用参数可能吗?
我遇到了generics类型约束非常奇怪的事情。 我有一个这样的课:
public SomeClass where T:class { }
但是,我发现我不能像我期望的那样使用可空类型:
new SomeClass();
我得到一个int?
的错误int?
必须是参考类型。 Nullable真的只是一个带有语法糖的结构,使它看起来像一个引用类型吗?
Nullable
是一个struct
(参见MSDN ),但它是唯一不满足struct
约束的struct
。 因此,在使用class
或struct
约束时,不能将Nullable
用作generics类型参数。
Nullable
不仅仅是具有一些合成糖的结构。 它在CLR中有一些特殊的支持。 例如,它有特殊的拳击行为。 具体来说,可以为空的盒子。 标的值是盒装的。 如果nullable为空值(HasValue为false),则将其转换为空引用。 此外,任何Nullable
到Nullable
转换运算符都会从T
到U
的转换中解除。 这些是您无法在.NET 1.0 / 1.1中实现的function。