如何从列表中获取对象的 属性 匹配特定值的对象?
How do I get an object from a list where a property of that object matches a certain value?
假设我有一个 class Person
,它有一个 属性 PersonId
类型 int
,还有一个 class Company
有一个 属性 Persons
类型 List<Person>
。我还有一个名为 company1
的 Company
对象。代码如下:
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();
我需要 return Persons
列表中的 Person
对象,其 属性 PersonId
匹配特定值,由 selectedPersonId
.
这是我目前用来执行此操作的代码:
Person person1;
int personIndex = company1.FindPersonIndexById(selectedPersonId);
if (personIndex != -1)
{
person1 = company1.Persons[personIndex];
}
其中 FindPersonIndexById(int)
是 Company
中的方法 class:
public int FindPersonIndexById(int personId)
{
for (int i = 0; i < Persons.Count(); i++)
{
if (Persons[i].PersonId == personId)
{
return i;
}
}
return -1;
}
这是从列表中获取对象的最佳方法,其中该对象的 属性 与特定值匹配,还是有更好或更简洁的方法?
我不确定这是否与这个问题类似:Check whether a List of object has a node which matches a given property of that object.
我会使用 Linq 来完成这项工作:
var personIWantToFind = Persons.SingleOrDefault(x => x.PersonId == personId);
另一种选择是使用 FirstOrDefault()
:
Person person1 = Persons.FirstOrDefault(p => p.PersonId = selectedPersonId);
这(正如 Mihai Carcostea 指出的那样)需要添加一个 using System.Linq
。
注意:如果列表中没有找到具有指定ID的人,person1
将是null
。
更简洁的是:
Person person = company1.Persons.Where(p=>p.PersonId == myValue).FirstOrDefault();
这需要 using System.Linq;
指令
编辑:谢谢 D Stanley
假设我有一个 class Person
,它有一个 属性 PersonId
类型 int
,还有一个 class Company
有一个 属性 Persons
类型 List<Person>
。我还有一个名为 company1
的 Company
对象。代码如下:
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();
我需要 return Persons
列表中的 Person
对象,其 属性 PersonId
匹配特定值,由 selectedPersonId
.
这是我目前用来执行此操作的代码:
Person person1;
int personIndex = company1.FindPersonIndexById(selectedPersonId);
if (personIndex != -1)
{
person1 = company1.Persons[personIndex];
}
其中 FindPersonIndexById(int)
是 Company
中的方法 class:
public int FindPersonIndexById(int personId)
{
for (int i = 0; i < Persons.Count(); i++)
{
if (Persons[i].PersonId == personId)
{
return i;
}
}
return -1;
}
这是从列表中获取对象的最佳方法,其中该对象的 属性 与特定值匹配,还是有更好或更简洁的方法?
我不确定这是否与这个问题类似:Check whether a List of object has a node which matches a given property of that object.
我会使用 Linq 来完成这项工作:
var personIWantToFind = Persons.SingleOrDefault(x => x.PersonId == personId);
另一种选择是使用 FirstOrDefault()
:
Person person1 = Persons.FirstOrDefault(p => p.PersonId = selectedPersonId);
这(正如 Mihai Carcostea 指出的那样)需要添加一个 using System.Linq
。
注意:如果列表中没有找到具有指定ID的人,person1
将是null
。
更简洁的是:
Person person = company1.Persons.Where(p=>p.PersonId == myValue).FirstOrDefault();
这需要 using System.Linq;
指令
编辑:谢谢 D Stanley