2

是否有一些实用程序可以检查序列是否包含多个元素而不是Contains重复使用?

List<string> containter = new List<string>();

for (int i = 0; i < 10; i++)
{
    containter.Add("string #" + i);
}

if (containter.Contains("string #2") &&       //Is it possible to replace this with one call passing two strings to improve efficiency 
    containter.Contains("string #6"))
{
    //Do Something
}
4

3 回答 3

3

根据更新的问题,我修改了我的答案:

List<string> containter = new List<string>();
for (int i = 0; i < 10; i++)
{
    containter.Add("string #" + i);
}
//define a checklist
List<string> checkList = new List<string> { "string #2", "string #6" };
//we're in, if every item in checkList is present in container
if (!checkList.Except(containter).Any())
{
    Console.WriteLine("true");
}

你仍然可以使用Any. Except但在这种情况下,使用方法会很好。

checkList如果结果序列中的每个项目都不container包含任何元素,那么Any应该返回false

于 2013-01-28T02:07:38.183 回答
2

我假设您想比较两个序列,并想知道一个序列是否包含另一个序列中的所有元素。

var outer = new List<String>() { "1", "2", "3" };
var inner = new List<String>() { "1", "2" };
bool outerContainsAllInnerElements = inner.TrueForAll(i => outer.Contains(i));

或者,您可以使用Intersect(),但是当您尝试获取其计数时,这会将您的项目投影到一个新序列中。如果那是您想要的,那很好,但是如果您不需要知道哪些元素相交,那么TrueForAll()可以节省开销。

var outer = new List<String>() { "1", "2", "3" };
var inner = new List<String>() { "1", "2" };
var elementsInBoth = outer.Intersect(inner);
bool outerContainsAllInnerElements = (elementsInBoth.Count() == inner.Count());
于 2013-01-28T02:19:25.270 回答
1

Any

string s = "I am a string";
string[] check = { "is", "my" };

Console.WriteLine(check.Any(x => s.Contains(x))); // False

s = "This is a string";
Console.WriteLine(check.Any(x => s.Contains(x))); // True

s = "my string";
Console.WriteLine(check.Any(x => s.Contains(x))); // True
于 2013-01-28T02:06:41.163 回答