如何从列表中获取该对象的属性与特定值匹配的对象?

时间:2015-02-17 23:00:58

标签: c# list object search properties

假设我有一个类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

其中selectedPersonIdPerson 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

3 个答案:

答案 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;指令

编辑:谢谢D Stanley

答案 2 :(得分:0)

另一种选择是使用FirstOrDefault()

Person person1 = Persons.FirstOrDefault(p => p.PersonId = selectedPersonId);

这(指出Mihai Carcostea)需要添加using System.Linq

注意:如果找不到具有指定ID的列表中的任何人,则person1将为null