6

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

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

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

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

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

谢谢。

4

2 回答 2

20
if (someList.Except(desiredItems).Any())
    // Uh oh
于 2013-06-14T22:32:27.680 回答
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();
于 2013-06-14T22:36:49.637 回答