检查对象列表是否包含具有特定值的属性

ryb*_*ybl 59 .net c# list

说我有以下代码:

class SampleClass
{
    public int Id {get; set;}
    public int Name {get; set;}
}
List<SampleClass> myList = new List<SampleClass>();
//list is filled with objects
...
string nameToExtract = "test";
Run Code Online (Sandbox Code Playgroud)

所以我的问题是我可以使用哪个List函数来myList仅从具有与我的nameToExtract字符串匹配的Name属性的对象中提取.

如果这个问题非常简单/明显,我会提前道歉.

Dan*_*n J 94

您可以使用Enumerable.Where扩展方法:

var matches = myList.Where(p => p.Name == nameToExtract);
Run Code Online (Sandbox Code Playgroud)

返回一个IEnumerable<SampleClass>.假设您想要过滤List,只需调用.ToList()上面的内容即可.


顺便说一句,如果我今天编写上面的代码,考虑到Unicode字符串处理的复杂性,我会以不同的方式进行相等性检查:

var matches = myList.Where(p => String.Equals(p.Name, nameToExtract, StringComparison.CurrentCulture));
Run Code Online (Sandbox Code Playgroud)

也可以看看

  • @BKSpurgeon是的,这是[Any()](https://docs.microsoft.com/en-us/dotnet/core/api/system.linq.enumerable#System_Linq_Enumerable_Any__1_System_Collections_Generic_IEnumerable___0__System_Func___0_System_Boolean__)方法. (8认同)
  • 具体来说,`Name`属性与`nameToExtract`匹配的所有对象,是. (3认同)
  • thx-是否存在布尔型版本,如果该布尔型版本存在或不存在,则简单地返回true或false? (3认同)

小智 22

list.Any(x=>x.name==string)
Run Code Online (Sandbox Code Playgroud)

可以检查列表中包含的任何名称道具。


Geo*_*voy 9

myList.Where(item=>item.Name == nameToExtract)
Run Code Online (Sandbox Code Playgroud)


Luk*_*keH 5

除了建议 LINQ 的其他答案之外,这种情况下的另一种选择是使用FindAll实例方法:

List<SampleClass> results = myList.FindAll(x => x.Name == nameToExtract);
Run Code Online (Sandbox Code Playgroud)