LINQ使用给定Type的OfType()来获取类

时间:2016-06-10 20:28:10

标签: c# linq

我想要归档List<IA>类型IA(接口)。让我们说我有以下结构:

interface IA {
    // Some definitions here...
}
class B : IA {}
class C : IA {}

我想使用LINQ过滤BC的列表。通常,我会使用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 {}

1 个答案:

答案 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>();