Ear*_*rlz 18 c# generics nullable reference-type generic-constraints
可能重复:可以为
Nullable类型作为通用参数?
我遇到了泛型类型约束非常奇怪的事情.我有一个这样的课:
public SomeClass<T> where T:class
{
}
Run Code Online (Sandbox Code Playgroud)
但是,我发现我不能像我期望的那样使用可空类型:
new SomeClass<int?>();
Run Code Online (Sandbox Code Playgroud)
我得到一个int?
必须是引用类型的错误.Nullable真的只是一个带有语法糖的结构,使它看起来像一个引用类型吗?
Mik*_*ray 21
Nullable<T>
是一个struct
(参见MSDN),但它是唯一struct
不满足struct
约束的.因此,在使用或约束Nullable
时,不能将a 用作泛型类型参数.class
struct
Nullable<T>
不仅仅是一个含有一些合成糖的结构.它在CLR中有一些特殊的支持.例如,它有特殊的拳击行为.具体来说,可以为空的盒子.标的值是盒装的.如果nullable为空值(HasValue为false),则将其转换为空引用.此外,任何Nullable<T>
to的转换运算符都会Nullable<U>
从转换中T
转移到U
.这些是您无法在.NET 1.0/1.1中实现的功能.