假设我有一个类Person
,其类型PersonId
的属性int
和类Company
的类Persons
{1}}。我还有一个名为List<Person>
的{{1}}对象。代码如下:
Company
我需要返回company1
列表中的class Company
{
public List<Person> Persons { get; private set; }
public Company()
{
this.Persons = new List<Person>();
}
}
class Person
{
public int PersonId { get; set; }
}
// In a different class
public static Company company1 = new Company();
对象,该列表的属性Person
与某个值匹配,由Persons
给出。
以下是我目前用来执行此操作的代码:
PersonId
其中selectedPersonId
是Person person1;
int personIndex = company1.FindPersonIndexById(selectedPersonId);
if (personIndex != -1)
{
person1 = company1.Persons[personIndex];
}
类中的方法:
FindPersonIndexById(int)
这是从列表中获取对象的最佳方式,该列表中该对象的属性与某个值匹配,还是有更好或更简洁的方法来执行此操作?
我不确定这是否与此问题相似:Check whether a List of object has a node which matches a given property of that object。
答案 0 :(得分:3)
我会使用Linq来完成这项工作:
var personIWantToFind = Persons.SingleOrDefault(x => x.PersonId == personId);
答案 1 :(得分:1)
更简洁:
Person person = company1.Persons.Where(p=>p.PersonId == myValue).FirstOrDefault();
这需要using System.Linq;
指令
答案 2 :(得分:0)
另一种选择是使用FirstOrDefault()
:
Person person1 = Persons.FirstOrDefault(p => p.PersonId = selectedPersonId);
这(指出Mihai Carcostea)需要添加using System.Linq
。
注意:如果找不到具有指定ID的列表中的任何人,则person1
将为null
。