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