为什么Nullable 不匹配作为generics约束的引用类型

可能重复:
Nullable类型作为通用参数可能吗?

我遇到了generics类型约束非常奇怪的事情。 我有一个这样的课:

public SomeClass where T:class { } 

但是,我发现我不能像我期望的那样使用可空类型:

 new SomeClass(); 

我得到一个int?的错误int? 必须是参考类型。 Nullable真的只是一个带有语法糖的结构,使它看起来像一个引用类型吗?

Nullable是一个struct (参见MSDN ),但它是唯一不满足struct约束的struct 。 因此,在使用classstruct约束时,不能将Nullable用作generics类型参数。

Nullable不仅仅是具有一些合成糖的结构。 它在CLR中有一些特殊的支持。 例如,它有特殊的拳击行为。 具体来说,可以为空的盒子。 标的值是盒装的。 如果nullable为空值(HasValue为false),则将其转换为空引用。 此外,任何NullableNullable转换运算符都会从TU的转换中解除。 这些是您无法在.NET 1.0 / 1.1中实现的function。