2011-01-10 158 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); 
相關問題