2011-01-10 154 views
41

说我有下面的代码属性:检查是否对象的列表中包含有一个特定的值

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"; 

所以我的问题是什么列表功能我可以用它来从myList仅提取有对象名称属性匹配我的nameToExtract字符串。

如果这个问题真的很简单明显,我很抱歉。

回答

67

可以使用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

+0

这是否返回所有对象的匹配`nameToExtract`是什么? – IAbstract 2011-01-10 20:43:33

+3

具体来说,所有'Name`属性匹配`nameToExtract`的对象,是的。 – 2011-01-10 20:45:00

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

编辑:误读问题(现在全部匹配)

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

而且在其他的答案提示LINQ,在这种情况下,另一种方法是使用FindAll实例方法:

List<SampleClass> results = myList.FindAll(x => x.Name == nameToExtract); 
相关问题