为什么Nullable <t>不匹配作为通用约束的引用类型</t>

时间:2012-12-10 03:20:59

标签: c# generics nullable reference-type generic-constraints

  

可能重复:
  Nullable type as a generic parameter possible?

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

public SomeClass<T> where T:class
{
}

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

new SomeClass<int?>();

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

1 个答案:

答案 0 :(得分:21)

Nullable<T>struct(请参阅MSDN),但它是唯一不满足struct约束的struct。因此,当使用Nullableclass约束时,您无法使用struct作为泛型类型参数。

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