可能重复:
可空类型作为泛型参数可能吗?
我遇到了一个非常奇怪的泛型类型约束。我有这样的课:
public SomeClass<T> where T:class
{
}
但是,我发现我不能像预期的那样使用可为空的类型:
new SomeClass<int?>();
我收到一个int?
必须是引用类型的错误。Nullable 真的只是一个带有语法糖的结构,使它看起来像一个引用类型吗?
可能重复:
可空类型作为泛型参数可能吗?
我遇到了一个非常奇怪的泛型类型约束。我有这样的课:
public SomeClass<T> where T:class
{
}
但是,我发现我不能像预期的那样使用可为空的类型:
new SomeClass<int?>();
我收到一个int?
必须是引用类型的错误。Nullable 真的只是一个带有语法糖的结构,使它看起来像一个引用类型吗?
Nullable<T>
是一个struct
(参见MSDN),但它是唯一struct
不满足struct
约束的。因此,当使用or约束时,不能将 aNullable
用作泛型类型参数。class
struct
Nullable<T>
不仅仅是一个带有一些语法糖的结构。它在 CLR 中为其某些行为提供了特殊支持。例如,它具有特殊的拳击行为。具体来说,一个可为空的对象永远不会被装箱。基础价值被装箱。如果 nullable 是 null 值(HasValue 为 false),则将其转换为 null 引用。此外,任何Nullable<T>
to的转换运算符Nullable<U>
都从转换 from T
to中提升U
。这些是您无法在 .NET 1.0/1.1 中自己实现的功能。