Equ*_*zer 8 c# equals type-safety
由于我的(单位)测试覆盖率仍然很低,不幸的是,我必须找到很多错误.因此,在重构期间,我严重依赖于C#编译器的类型检查.
今天,我修复了重构期间引入的错误,错过了一行x.Equals(aThingWrappingOriginalThing).就这样bool Equals(object T),编译器没有抱怨.但是,有90%的时间我Equals()直接使用(而不是通过BCL),我打算在逻辑上比较相同类型的对象.
现在我想知道为什么我从来没有见过有人Equals()为这种情况推广类型安全版本(在C#中).这是最好的做法吗?
我很想在这些比较中使用扩展方法,如下所示:
public static bool SafeEquals<T>(this T a, T b)
{
if (a == null) return b == null;
return a.Equals(b);
}
public static bool SafeEquals<X>(this IEquatable<X> a, IEquatable<X> b)
{
if (a == null) return b == null;
return a.Equals(b);
}
Run Code Online (Sandbox Code Playgroud)
这些可以优化吗?
这是关于我发现的主题的唯一博客文章,对于java:http: //rickyclarkson.blogspot.com/2006/12/making-equalsobject-type-safe.html
你在找
EqualityComparer<T>.Default.Equals(x,y);
Run Code Online (Sandbox Code Playgroud)
这支持IEquatable<T>(如果实现),否则使用潜在的拳击Equals(object); 它支持类和结构,两者都有预期的空行为,包括对Nullable<T>(没有装箱)的支持.
| 归档时间: |
|
| 查看次数: |
656 次 |
| 最近记录: |