私の(単体)テストカバレッジはまだかなり低いので、残念ながら、私は多くのエラーを難しい方法で見つけなければなりません。したがって、リファクタリング中は、C#コンパイラの型チェックに大きく依存しています。
今日、リファクタリング中に発生したバグを修正しましたx.Equals(aThingWrappingOriginalThing)
。それがそうであるようbool Equals(object T)
に、コンパイラは文句を言いませんでした。ただし、(BCLを介してではなく)直接使用する時間の90%はEquals()
、同じタイプのオブジェクトを論理的に比較することを目的としています。
今、私はなぜ誰かが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