【发布时间】:2018-07-19 01:06:10
【问题描述】:
我环顾四周,找不到答案。假设我有这个代码:
class Command<T> : ICommand<T>
{
public void Execute(T parameter)
{
var isNull = parameter == null;
// ...
}
}
T 可以是任何类,甚至是Nullable<>。如果T 是值类型,执行上述检查会导致装箱吗?我的理解是,这与调用ReferenceEquals 相同,它需要两个object 参数,如果我理解正确的话,如果T 是一个值类型,其中任何一个都会导致装箱。
如果上述情况确实会导致装箱,是否有更优选的方法来执行此操作而不会导致出现装箱?我知道有default(T),但在int 的情况下是0,我想看看这个值是否是null 而没有装箱。另外,我希望以同时满足值和引用类型的方式来做到这一点。
【问题讨论】:
-
顺便说一句,您可以将您的问题简化为:为什么允许这样做:
bool intIsNull = 1 == null,这也是完全合法(但无用)的代码。