MyClass<T>
タイプの2つのオブジェクトを比較する必要があるジェネリックがあるとします<T>
。通常、私は次のようなことをします...
void DoSomething(T o1, T o2)
{
if(o1.Equals(o2))
{
...
}
}
ここで、のようなMyClass<T>
カスタムの受け渡しをサポートするコンストラクターがあるとします。その場合、私はする必要があります...IEqualityComparer<T>
Dictionary<T>
private IEqualityComparer<T> _comparer;
public MyClass() {}
public MyClass(IEqualityComparer<T> comparer)
{
_comparer = comparer;
}
void DoSomething(T o1, T o2)
{
if((_comparer != null && _comparer.Equals(o1, o2)) || (o1.Equals(o2)))
{
...
}
}
_comparer
この長いifステートメントを削除するには、通常のコンストラクターを使用する場合に、デフォルトを「デフォルトの比較子」にすることができればよいでしょう。のようなものを検索しましたが、そのようなものtypeof(T).GetDefaultComparer()
は見つかりませんでした。
私は見つけましたEqualityComparer<T>.Default
、私はそれを使うことができますか?そして、このスニペットは...
public MyClass()
{
_comparer = EqualityComparer<T>.Default;
}
void DoSomething(T o1, T o2)
{
if(_comparer.Equals(o1, o2))
{
...
}
}
o1.Equals(o2)
...考えられるすべてのケースで使用するのと同じ結果を提供しますか?
(補足として、これは、特別なジェネリック制約も使用する必要があることを意味し<T>
ますか?)