反思找到实现具有多个开放泛型参数的接口的类

时间:2015-10-21 21:42:18

标签: c# generics reflection

我们说我有这样的界面:

public interface ITest<T1, T2>
{
}

这样的课程:

public class Concrete : ITest<int, string>
{
}

使用反射,我怎样才能找到这个具体的类?我尝试过以下操作,但它不起作用,因为我没有指定泛型类型参数。

var concretes = Assembly.GetAssembly(typeof(Concrete)).GetTypes()
                        .Where(x => x.IsAssignableFrom(typeof(ITest<,>))
                               && !x.IsInterface);

这将返回零项。甚至可以做我想做的事情吗?

1 个答案:

答案 0 :(得分:3)

试试这个:

var concretes =
    Assembly
    .GetAssembly(typeof (Concrete))
    .GetTypes()
    .Where(t =>
        t.GetInterfaces()
        .Any(i =>
            i.IsGenericType && i.GetGenericTypeDefinition() == typeof(ITest<,>)))
    .ToList();