IEqualityComparer.Equals与IEnumerable.Contains使用时是X或Y在列表中的价值?
-
09-09-2019 - |
题
IEnumberable具有延伸方法包含
我的问题是X或Y从IEnumerable的α的值
实施例
List<string> test = new List<String() { "a", "b", "c" };
test.Contains("d", myComparer);
当它调用Equals方法为所述第一值将是 等于( “一”, “d”)或等于( “d”, “a”)的
解决方案
它不应该物质 - 平等应该是对称的。从文档为 IEqualityComparer<T>.Equals
:
equals方法是自反的, 对称和传递。这就对了 如果用于比较的返回true 与自身对象;真正的两 对象x和y如果y的真 并且x;和真正的两个对象x和 ž如果是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