我有一个像这样定义的泛型方法:
public void MyMethod<T>(T myArgument)
Run Code Online (Sandbox Code Playgroud)
我想要做的第一件事是检查myArgument的值是否是该类型的默认值,如下所示:
if (myArgument == default(T))
Run Code Online (Sandbox Code Playgroud)
但是这不能编译,因为我没有保证T将实现==运算符.所以我把代码改为:
if (myArgument.Equals(default(T)))
Run Code Online (Sandbox Code Playgroud)
现在这个编译,但是如果myArgument为null则会失败,这是我正在测试的一部分.我可以像这样添加一个显式的空检查:
if (myArgument == null || myArgument.Equals(default(T)))
Run Code Online (Sandbox Code Playgroud)
现在这让我感到多余.ReSharper甚至建议我将myArgument == null部分更改为myArgument == default(T),这是我开始的地方.有没有更好的方法来解决这个问题?
我需要支持两种引用类型和值类型.