我创建了一个课程列表。在这里您可以看到代码:
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)
但是,我怎么能倒过来做并获得名字的位置呢?当我有了这个时,就很容易获得年龄。
您可以使用以下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)