C# 在2个数组中循环以比较值c

C# 在2个数组中循环以比较值c,c#,asp.net,arrays,C#,Asp.net,Arrays,我环顾四周,并没有找到这个问题的具体答案。我有两个数组,一个用于保存人员列表,另一个用于保存带有name属性的Person对象。我试图在对象数组中循环,如果person.Name中的值等于字符串数组中相应的值,那么我向计数器添加1。我见过使用Linq给出的答案,但我对此并不熟悉。是否有一种我忽略的基本方法,或者我需要使用Linq。提前谢谢。 这是我的密码 int count = 0; string[] names = new string[]{"John","Jim","Mary","Joan

我环顾四周,并没有找到这个问题的具体答案。我有两个数组,一个用于保存人员列表,另一个用于保存带有name属性的Person对象。我试图在对象数组中循环,如果person.Name中的值等于字符串数组中相应的值,那么我向计数器添加1。我见过使用Linq给出的答案,但我对此并不熟悉。是否有一种我忽略的基本方法,或者我需要使用Linq。提前谢谢。 这是我的密码

int count = 0;

string[] names = new string[]{"John","Jim","Mary","Joan","Tim"};

ObservableCollection<Person> people = (ObservableCollection<Person>)Session["People"];

foreach (var pe in people)
{
    for (int i = 0; i < names.Length; i++)
    {
        if (pe.Name == names[i])
            count++;
    }    
}
尝试以下解决方案:

var count = people.Count(pe => names.Contains(pe.Name));

你发布的内容将起作用。循环的更简单版本是:

foreach (var pe in people)
{
    if(names.Contains(pe.Name))
        count++;  
}
使用LINQ,这是一个单线事件:

count = people.Count(person => names.Contains(person.Name));
我强烈建议借此机会熟悉LINQ。它非常强大,在这种情况下,代码更简洁,可读性更强。

您应该使用HashSet来存储名称。当字符串[]上的相同Contains方法处于启用状态时,它具有O1 Contains方法

还是跟林克

count = people.Count(person => set.Contains(person.Name));

它将使您的解决方案成为Om而不是On*m

只需一个澄清:您不需要使用LINQ做任何事情。这些方法只是针对某些问题的一种优化选择。您可以使用它们编写更少的代码,或者在某些情况下,更快地完成任务。但是任何可以用LINQ做的事情,都可以不用它。
foreach (var pe in people)
{
    if(set.Contains(pe.Name))
        count++;  
}
count = people.Count(person => set.Contains(person.Name));