2010-07-13 59 views
23

有沒有辦法在列表中找到具有Linq/Lambda表達式的某種類型的所有項目?Linq找到所有具有某種類型的東西

更新:由於答案,我意識到這個問題不夠具體。我只需要一個具有特定類型項目的新列表。就我而言,這個類沒有任何子類,所以不需要考慮繼承。

+0

你能說出您是否想忽略繼承?例如。如果你想要所有的對象類型,你想只是對象類型還是包含對象的所有子類。一些答案會做第一個,其他答案會做第一個。 – 2010-07-13 11:12:55

+0

我看到,在我的情況下,這個類沒有任何子類。 – 2010-07-13 11:14:46

回答

73

使用OfType<T>像這樣:

foreach (var bar in MyList.OfType<Foo>()) { 
    ... 
} 
+3

使用IEnumerable 擴展方法OfType 是微軟推薦的方法。 – devlife 2010-07-13 11:58:05

29

請問這個怎麼辦?

list.Where(t => t is MyType); 
+2

+1閱讀好得多,其他方式 – GFoley83 2013-07-12 05:57:36

+0

是的,看起來更容易閱讀。 +1 – 2014-06-27 10:54:09

+5

但是你仍然必須施放結果,如果你使用OfType,結果也會被鑄造出來。 – 2016-02-24 14:05:35

0

,也許你可以使用...

 List<object> list = new List<object>(); 
     list.Add("string"); 
     list.Add(9); 

     var allOfOneType = list.Where(i => i.GetType().Equals(typeof(string))); 
+0

是啊...戴夫馬克斯答案更好 - 也許:) – hnkz 2010-07-13 11:04:52

1

像這樣的東西(如果使用LINQ to對象 - 它不會使用LINQ工作單位):

var specificListOfTypes = from item in list 
          where item.GetType() == typeof(int) 
          select item; 
+2

你不能使用GetType()。它會拋出以下錯誤:「LINQ to Entities不能識別方法'System.Type GetType()'方法,並且此方法不能轉換爲存儲表達式。」 – spadelives 2013-06-19 02:25:11

+0

好吧,所以你不能在LINQ to Entities中使用GetType(),但是LINQ to objects does not work – 2013-08-22 09:19:50

-1

你可以使用GetType()方法並與指定的類型進行比較。

舉例來說,我選擇string類型的所有值從以下列表:

var myList = new List<object>(); 

     myList.Add(5); 

     myList.Add("My life"); 

     var result = from obj in myList 
        where obj.GetType() == typeof(string) 
        select obj; 
+1

這會引發一個錯誤,「LINQ to Entities does not recognized the method'System.Type GetType()'method,this this方法不能轉換成商店表達式。「 – spadelives 2013-06-19 02:24:31

-1

我建議使用此 var myLst = new List<object>(); var elements = myList.Where(item => item.GetType().IsInstanceOfType(typeof(MyClass)));

相關問題