繁体   English   中英

如何从列表中获得对象的属性与某个值匹配的对象?

[英]How do I get an object from a list where a property of that object matches a certain value?

假设我有一个Person类,其属性类型为int ,其PersonId ,一个Company类,其属性具有类型为List<Person> Persons 我也有一个名为company1Company对象。 用于此的代码如下:

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();

我需要在Persons列表中返回Person对象,该对象的属性PersonId匹配由selectedPersonId给出的某个值。

这是我目前用于执行此操作的代码:

Person person1;
int personIndex = company1.FindPersonIndexById(selectedPersonId);
if (personIndex != -1)
{
    person1 = company1.Persons[personIndex];
}

其中, FindPersonIndexById(int)Company类中的方法:

public int FindPersonIndexById(int personId)
{
    for (int i = 0; i < Persons.Count(); i++)
    {
        if (Persons[i].PersonId == personId)
        {
            return i;
        }
    }
    return -1;
}

这是从对象的属性与某个值匹配的列表中获取对象的最佳方法,还是有一种更好或更简洁的方法呢?
我不确定这是否类似于以下问题: 检查对象列表是否具有与该对象的给定属性匹配的节点

我会使用Linq来完成这项工作:

var personIWantToFind = Persons.SingleOrDefault(x => x.PersonId == personId);

更为简洁的是:

Person person = company1.Persons.Where(p=>p.PersonId == myValue).FirstOrDefault();

这需要using System.Linq; 指示

编辑:谢谢,D斯坦利

另一种选择是使用FirstOrDefault()

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

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

注意 :如果在列表中未找到具有指定ID的人员, person1将为null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM