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

时间:2011-01-10 20:38:32

标签: 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";

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

如果这个问题非常简单/明显,我会事先道歉。

5 个答案:

答案 0 :(得分:84)

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

var matches = myList.Where(p => p.Name == nameToExtract);

返回IEnumerable<SampleClass>。假设您想要过滤List,只需在上面调用.ToList()


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

var matches = myList.Where(p => String.Equals(p.Name, nameToExtract, StringComparison.CurrentCulture));

See also

答案 1 :(得分:8)

myList.Where(item=>item.Name == nameToExtract)

答案 2 :(得分:1)

using System.Linq;    
list.Where(x=> x.Name == nameToExtract);

编辑:误读问题(现在所有匹配)

答案 3 :(得分:1)

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

List<SampleClass> results = myList.FindAll(x => x.Name == nameToExtract);

答案 4 :(得分:-2)

您应该查看Reflection API。这是一个元命名空间,包含有关类本身的信息。您可以询问接口继承和所有内容。

http://msdn.microsoft.com/en-us/library/z919e8tw%28v=vs.80%29.aspx