Gre*_*reg 53 c# generics equality
以下内容无法编译:
public void MyMethod<T>(T value)
{
if (value == default(T))
{
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
错误: Operator '==' cannot be applied to operands of type 'T' and 'T'
我不能使用value == null因为T可能是一个结构.
我不能用value.Equals(default(T))因为value可能null.
测试相等于默认值的正确方法是什么?
Mar*_*ell 79
为了避免拳击struct/ Nullable<T>,我会使用:
if (EqualityComparer<T>.Default.Equals(value,default(T)))
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
这支持任何T实现IEquatable<T>,object.Equals用作备份,并自动处理null等(并提升运算符Nullable<T>).
还有Comparer<T>.Default处理比较测试.这可以处理T该工具IComparable<T>,IComparable再次回到- 再次处理null和解除操作员.
Gra*_*ton 28
关于什么
object.Equals(value, default(T))
Run Code Online (Sandbox Code Playgroud)