C#List仅包含

时间:2013-06-14 22:31:24

标签: c# list ienumerable contains

希望找出是否有一种简单的方法来检查列表是否只包含某些列表值。

例如,如果我有一个int列表,可以随机包含不同的整数1-10(即1,3,7或2,3,4,6,8,9),我想检查是否只有列表包含int 1和/或5. 1或5或1,5将返回true,其他任何内容都将返回false。

这实际上是一个MVC项目,是一个字符串列表。根据条件,我构建一个字符串列表,并想检查列表中是否存在2个特定字符串中的1个或两个但没有其他字符串。

现在我拿下列表并检查它是否包含2个字符串中的每一个并删除它们(如果存在)。然后,我可以统计列表,如果> 0我知道一个或两个字符串不是列表中的唯一值。这感觉非常hackish,我认为有更好的方法来做到这一点。同样在将来,如果我的两个字符串是另一个动态的字符串列表,那么有一个简单的方法,而不是必须预先知道两个列表的每个字符串,如果存在于另一个列表中,那么在我可以计算列表之前将其删除我需要的布尔。

希望有类似.Contains(T Item)的东西,比如.OnlyContains(T Item或IEnumerable),但还没有找到类似的东西。

感谢。

2 个答案:

答案 0 :(得分:16)

if (someList.Except(desiredItems).Any())
    // Uh oh

答案 1 :(得分:1)

如果我正确理解了这个问题,你想知道一个集合是否包含另一个集合中的任何项目。使用Enumerable.Intersect

var ints1 = new[] { 1, 3, 7 };
var ints2 = new [] { 2, 3, 4, 6, 8, 9 };
var list = new[] { 1, 5 };
bool containsAny = ints1.Intersect(list).Any();
Console.WriteLine(containsAny);    // True
containsAny = ints2.Intersect(list).Any();
Console.WriteLine(containsAny);    // False

还包括此要求

  

列表1,5或列表没有元素也会返回true。

检查集合是否包含任何元素:

bool any = list.Any();