检查两个列表是否在单个评估中具有相同的元素

时间:2012-11-24 09:57:10

标签: c# list

  

可能重复:
  Comparing two collections for equality

我有两个列表

List<int> Foo = new List<int>(){ 1, 2, 3 };

List<int> Bar = new List<int>(){ 2, 1 };

要确定他们是否有相同的元素我做了

if(Foo.Except(Bar).Any() || Bar.Except(Foo).Any())
{
    //Do Something
}

但这需要两次bool评估。首先它Foo.Except(Bar).Any()然后Bar.Except(Foo).Any()。有没有办法在单一评估中做到这一点?

2 个答案:

答案 0 :(得分:1)

        var sharedCount = Foo.Intersect(Bar).Count();
        if (Foo.Distinct().Count() > sharedCount || Bar.Distinct().Count() > sharedCount)
        {
            // there are different elements
        }
        {
            // they contain the same elements
        }

答案 1 :(得分:-3)

您不必检查两次。 只做这样的事情(注意Foo,它可以为null并抛出相关的异常)

if(Foo.Intersect(Bar).Any())
{
    //Do Something
}

您可能还需要首先检查是否必须检查其中一个列表是否为空或为空...但仅当这种情况对您有任何特定价值时才会检查。