由於我的(單元)測試覆蓋率仍然很低,不幸的是,我不得不用很難的方法找到很多錯誤。因此,在重構期間,我主要依賴於C#編譯器的類型檢查。類型安全等於()
今天,我修復了在重構期間由於缺少一行x.Equals(aThingWrappingOriginalThing)
而引入的錯誤。因爲它是bool Equals(object T)
,編譯器沒有抱怨。但是,90%的時間我直接使用Equals()
(而不是通過BCL),我打算在邏輯上比較相同類型的對象。
現在我想知道爲什麼我從來沒有見過某人爲這種情況(在C#中)推銷Equals()
的類型安全版本。對此有最佳做法嗎?
我很想使用擴展方法對於那些comparisions,就像這樣:
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
以下是有關該主題的一些背景:http://blogs.msdn.com/b/ericlippert/archive/2009/04/09/double-your-dispatch-double-your-fun.aspx – Vlad 2012-07-10 20:16:41