有没有办法在列表中找到具有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