• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

测试平等默认值

c/c++ 来源:Greg 7次浏览

以下不会编译:测试平等默认值

public void MyMethod<T>(T value) 
{ 
    if (value == default(T)) 
    { 
     // do stuff 
    } 
} 

错误:Operator '==' cannot be applied to operands of type 'T' and 'T'

我不能使用value == null因为T可能是一个结构。
我不能使用value.Equals(default(T)),因为value可能是null
什么是测试相等到默认值的正确方法?


===========解决方案如下:

为了避免拳击struct/Nullable<T>,我会用:

if (EqualityComparer<T>.Default.Equals(value,default(T))) 
{ 
    // do stuff 
} 

这支持实现IEquatable<T>任何T,使用object.Equals作为备份,并处理null等等(并且自动解除运营商对于Nullable<T>)。

还有Comparer<T>.Default它处理比较测试。这处理T实施IComparable<T>,回落到IComparable – 再次处理null和解除运营商。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)