C# 检查对象列表是否包含具有特定值的属性
假设我有以下代码:C# 检查对象列表是否包含具有特定值的属性,c#,.net,list,C#,.net,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"; class-SampleClass { 公共int
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";
class-SampleClass
{
公共int Id{get;set;}
公共int名称{get;set;}
}
List myList=新列表();
//列表中充满了对象
...
字符串名称extract=“test”;
所以我的问题是,我可以使用什么列表函数从myList
中仅提取具有与我的nameToExtract
字符串匹配的Name属性的对象
如果这个问题真的很简单/明显,我提前表示歉意。您可以使用扩展方法:
var matches = myList.Where(p => p.Name == nameToExtract);
返回一个IEnumerable
。假设您想要一个经过过滤的列表
,只需在上面调用.ToList()
顺便说一句,如果我今天写上面的代码,考虑到Unicode字符串处理的复杂性,我会以不同的方式进行相等性检查:
var matches = myList.Where(p => String.Equals(p.Name, nameToExtract, StringComparison.CurrentCulture));
编辑:误读问题(现在所有匹配项)除了建议LINQ的其他答案之外,本例中的另一种选择是使用实例方法:
List<SampleClass> results = myList.FindAll(x => x.Name == nameToExtract);
List results=myList.FindAll(x=>x.Name==nameToExtract);
这会返回所有匹配nameToExtract
的对象吗?特别是Name
属性匹配nameToExtract
的所有对象,yes.thx-是否存在布尔版本,如果它存在或不存在,它只返回true或false?@BKSpurgeon yes,这就是方法。SampleClass
类中的Name
属性应该是string
类型,对吗?
myList.Where(item=>item.Name == nameToExtract)
List<SampleClass> results = myList.FindAll(x => x.Name == nameToExtract);