簡體   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