19

可能重复:
可空类型作为泛型参数可能吗?

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

public SomeClass<T> where T:class
{
}

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

new SomeClass<int?>();

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

4

1 回答 1

22

Nullable<T>是一个struct(参见MSDN),但它是唯一struct不满足struct约束的。因此,当使用or约束时,不能将 aNullable用作泛型类型参数。classstruct

Nullable<T>不仅仅是一个带有一些语法糖的结构。它在 CLR 中为其某些行为提供了特殊支持。例如,它具有特殊的拳击行为。具体来说,一个可为空的对象永远不会被装箱。基础价值被装箱。如果 nullable 是 null 值(HasValue 为 false),则将其转换为 null 引用。此外,任何Nullable<T>to的转换运算符Nullable<U>都从转换 from Tto中提升U。这些是您无法在 .NET 1.0/1.1 中自己实现的功能。

于 2012-12-10T03:52:49.817 回答