IEnumberable具有延伸方法包含这需要两个参数。第一个参数是检查的值,第二个是的IEqualityComparer的实现。 看着IEqualityComparer.Equals它有一个名为x和y两个参数,第一个和第二个要比较的对象。

我的问题是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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top