我想要归档List<IA>
类型IA
(接口)。让我们说我有以下结构:
interface IA {
// Some definitions here...
}
class B : IA {}
class C : IA {}
我想使用LINQ过滤B
和C
的列表。通常,我会使用myList.OfType<B>().ToList()
方法,但由于我不知道在我的方法中,我想要过滤哪种类型,我需要找到我正在使用的列表的基本类型:< / p>
Type[] types = myList.GetType().GetGenericArguments();
// type[0] == typeof(B)
现在我想做点什么:
List<IA> filteredList = myList.OfType<type[0]>().ToList();
这并不是因为OfType<>()
只接受一个类而不是一个类型的明显原因。我的问题是:我如何从一个类型回到课堂?
修改:将我想要实现的结果从List<type[0]>
更改为List<IA>
。
Edit2 :一个有效的最小例子
class Program
{
static List<IExample> exampleList;
static void Main(string[] args)
{
exampleList = new List<IExample>();
A a = new A();
B b = new B();
exampleList.Add(a);
exampleList.Add(b);
List<IExample> anotherList = new List<IExample>();
anotherList.Add(new A());
FilterList(anotherList);
}
static void FilterList(List<IExample> anotherList)
{
Type t = anotherList.ElementAt(0).GetType();
// This does not work:
//exampleList.OfType<t>().ToList();
// This does work:
List<IExample> filteredList = exampleList.Where(item => item.GetType() == t).ToList();
// The filtered List is then used for further processing ...
}
}
interface IExample {}
class A : IExample {}
class B : IExample {}
答案 0 :(得分:0)
以下片段似乎回答了原来的问题:
interface IA {}
class B : IA {}
class C : IA {}
var myList = new List<IA>{new B(), new C()};
var myType = myList[0].GetType();
var myFilteredList = myList.Where(elt => elt.GetType().Equals(myType)).ToList<IA>();