我有这样定义的通用方法:
public void MyMethod<T>(T myArgument)
我要做的第一件事是检查myArgument的值是否是该类型的默认值,如下所示:
if (myArgument == default(T))
但这不能编译,因为我不能保证T将实现==运算符。所以我将代码切换为:
if (myArgument.Equals(default(T)))
现在可以编译,但是如果myArgument为null,则失败,这是我要测试的一部分。我可以像这样添加一个显式的null检查:
if (myArgument == null || myArgument.Equals(default(T)))
现在这对我来说是多余的。ReSharper甚至建议我将myArgument == null部分更改为myArgument == default(T),这是我开始的地方。有解决这个问题的更好方法吗?
我需要支持两种引用类型和值类型。
true
在任何情况下都求值为,因为将Equals
始终为值类型调用,因为在这种情况下myArgument
不能调用,null
并且Equals
(boolean)的结果永远不会null
。
if (myArgument?.Equals( default(T) ) != null )
。