从C#中的列表获取数据

Ekn*_*oes 3 c# class list

我创建了一个课程列表。在这里您可以看到代码:

public class People{
        public string name;
        public int age;     
    }   

public List<People> peopleInfo = new List<People>();
Run Code Online (Sandbox Code Playgroud)

我的问题是,例如,我有一个名字,现在我想知道年龄。我如何获得这些数据?我可以通过以下方式获得特定职位的姓名或年龄:

int pos = peopleInfo[0].name;
Run Code Online (Sandbox Code Playgroud)

但是,我怎么能倒过来做并获得名字的位置呢?当我有了这个时,就很容易获得年龄。

p.s*_*w.g 5

您可以使用以下FindIndex方法:

var searchForName = "John";
int index = peopleInfo.FindIndex(p => p.name == searchForName);
Run Code Online (Sandbox Code Playgroud)

这将返回列表中name属性等于的第一个人的索引"John"。当然,可能有很多人的名字"John",并且您可能想要找到所有这些人。为此,您可以使用LINQ:

IEnumerable<int> indexes = peopleInfo.Select((p, i) => new { p, i })
                                     .Where(x => x.p.name == searchForName)
                                     .Select(x => x.i);
foreach(int i in indexes)
{
    peopleInfo[i].age ...
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您真的不需要索引,则要简单得多

foreach(People person in peopleInfo.Where(p => p.name == searchForName))
{
    person.age ...
}
Run Code Online (Sandbox Code Playgroud)