IEnumerable.Containsと共に使用IEqualityComparer.Equalsは、xまたはyリスト中の値はありますか?
-
09-09-2019 - |
質問
IEnumberableは、拡張メソッドは
私の質問は、XまたはYのIEnumerableから値はありますか?
の例の
List<string> test = new List<String() { "a", "b", "c" };
test.Contains("d", myComparer);
それは最初の値に対してEqualsメソッドを呼び出すとはなり 等号( "A"、 "D")または等号( "D"、 "A")?
解決
これは問題ではないはず - 平等は対称でなければなりません。
:IEqualityComparer<T>.Equals
のドキュメントから
Equalsメソッドは、反射的です 対称、推移。それだ 比較するために使用される場合はtrueを返します。 自分自身を持つオブジェクト。 2のための真 オブジェクトのxとyはyのために真である場合 かつx;そして二つのオブジェクトxについて真と Zそれはまた、xとyとのために真である場合 YおよびZについても同様。
私はEnumerable.Contains
での使用は、すなわち、それは将来のバージョンで変更される可能性があり、明確に定義されているとは思いません。あなたは自分の等値比較は、インターフェイスのドキュメントに従う作る場合、あなたは大丈夫です。
他のヒント
完全を期すためIEnumberableの反射されたコードは、それが左側にあることを示している(下記参照)。それを使用する際の危険があるのでしかし、これまで変更しないことを約束されていないこと。
public static bool Contains<TSource>(this IEnumerable<TSource> source, TSource value, IEqualityComparer<TSource> comparer)
{
if (comparer == null)
{
comparer = EqualityComparer<TSource>.Default;
}
if (source == null)
{
throw Error.ArgumentNull("source");
}
foreach (TSource local in source)
{
if (comparer.Equals(local, value))
{
return true;
}
}
return false;
}
所属していません StackOverflow