有沒有辦法在列表中找到具有Linq/Lambda表達式的某種類型的所有項目?Linq找到所有具有某種類型的東西
更新:由於答案,我意識到這個問題不夠具體。我只需要一個具有特定類型項目的新列表。就我而言,這個類沒有任何子類,所以不需要考慮繼承。
有沒有辦法在列表中找到具有Linq/Lambda表達式的某種類型的所有項目?Linq找到所有具有某種類型的東西
更新:由於答案,我意識到這個問題不夠具體。我只需要一個具有特定類型項目的新列表。就我而言,這個類沒有任何子類,所以不需要考慮繼承。
使用OfType<T>
像這樣:
foreach (var bar in MyList.OfType<Foo>()) {
...
}
使用IEnumerable
請問這個怎麼辦?
list.Where(t => t is MyType);
+1閱讀好得多,其他方式 – GFoley83 2013-07-12 05:57:36
是的,看起來更容易閱讀。 +1 – 2014-06-27 10:54:09
但是你仍然必須施放結果,如果你使用OfType,結果也會被鑄造出來。 – 2016-02-24 14:05:35
,也許你可以使用...
List<object> list = new List<object>();
list.Add("string");
list.Add(9);
var allOfOneType = list.Where(i => i.GetType().Equals(typeof(string)));
是啊...戴夫馬克斯答案更好 - 也許:) – hnkz 2010-07-13 11:04:52
像這樣的東西(如果使用LINQ to對象 - 它不會使用LINQ工作單位):
var specificListOfTypes = from item in list
where item.GetType() == typeof(int)
select item;
你不能使用GetType()。它會拋出以下錯誤:「LINQ to Entities不能識別方法'System.Type GetType()'方法,並且此方法不能轉換爲存儲表達式。」 – spadelives 2013-06-19 02:25:11
好吧,所以你不能在LINQ to Entities中使用GetType(),但是LINQ to objects does not work – 2013-08-22 09:19:50
你可以使用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;
這會引發一個錯誤,「LINQ to Entities does not recognized the method'System.Type GetType()'method,this this方法不能轉換成商店表達式。「 – spadelives 2013-06-19 02:24:31
我建議使用此 var myLst = new List<object>(); var elements = myList.Where(item => item.GetType().IsInstanceOfType(typeof(MyClass)));
你能說出您是否想忽略繼承?例如。如果你想要所有的對象類型,你想只是對象類型還是包含對象的所有子類。一些答案會做第一個,其他答案會做第一個。 – 2010-07-13 11:12:55
我看到,在我的情況下,這個類沒有任何子類。 – 2010-07-13 11:14:46