The*_*edi 1 c# generics nullable
以下代码编译:
class Testing<TKey, TValue>
{
public bool Test(TKey key)
{
return key == null;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,TKey可以是值类型,并且可能不允许值"null".
我知道这个程序的结果,以及如何添加约束.我想知道为什么当TKey不被约束为"类"时,编译器不会禁止这个?
在各种情况下能够做到这一点很方便.如果TKey是非可空值类型,则比较结果将始终为false.(JITter可能会完全删除该分支 - 不要忘记,虽然所有引用类型共享一个版本的JITted代码,但它会为每个值类型重新命名.)
编辑:一个有趣的用途恰恰是允许Nullable<T>与null 进行比较.TFoo=Nullable<T>不满足任一的where TFoo : class 或 where TFoo : struct约束.