我有两个列表
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()
。有没有办法在单一评估中做到这一点?
答案 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
}
您可能还需要首先检查是否必须检查其中一个列表是否为空或为空...但仅当这种情况对您有任何特定价值时才会检查。