使用Linq操作找出与IList <string []> 1和IList <string []> 2的区别</string []> </string []>

时间:2014-07-19 19:53:47

标签: c# linq lambda

嗨,有任何使用Linq或lambda表达式的方法构建或任何其他方法,我们可以获得存在的记录,IList<string[]>一个但不在IList<string[]>两个,反之亦然。我尝试使用linq Except关键字,但它不起作用,当我对{[1}}上的字符串[]进行操作时,它的工作正常。

1 个答案:

答案 0 :(得分:3)

您需要为string[]实现IEqualityComparer,默认情况下,数组会通过引用进行比较。即使数组的元素相同,引用也不同。所以Except方法将它们视为不同。

class ArrayComparer : IEqualityComparer<string[]>
{
    public bool Equals(string[] x, string[] y)
    {
        // do your comparison here
    }

    public int GetHashCode(string[] obj)
    {
        // write your hash algorithm 
    }

}

然后您可以通过传递Except方法来使用此比较器:

var result = list1.Except(list2, new ArrayComparer());