由于我的(单元)测试覆盖率仍然很低,不幸的是,我不得不以艰难的方式找到很多错误。因此,在重构期间,我严重依赖 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);
}
这些可以优化吗?
这是我找到的关于该主题的唯一一篇博客文章,适用于 java: http ://rickyclarkson.blogspot.com/2006/12/making-equalsobject-type-safe.html