私の(単位)テストカバレッジがまだかなり低いので、残念ながら、私は多くのエラーを難しい方法で見つけなければなりません。したがって、リファクタリング時には、C#コンパイラの型チェックに大きく依存しています。タイプセーフなEquals()
今日、リファクタリング時に導入されたバグをx.Equals(aThingWrappingOriginalThing)
という行で紛失した問題を修正しました。 bool Equals(object T)
のように、コンパイラは不平を言っていませんでした。しかし、私がEquals()
を(BCLの代わりに)直接使用する時間の90%は、同じタイプのオブジェクトを論理的に比較するつもりです。
今私はこのような状況のためにEquals()
の型セーフバージョンを宣伝している人は見たことがないのですが(C#)。これにはベストプラクティスがありますか?
そうように私は、これらの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);
}
は、これらが最適化されていませんか? 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