假设我有一个这样的接口:

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);


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

最佳答案

尝试这个:

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

关于c# - 反射(reflection)找到实现具有多个开放通用参数的接口(interface)的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33269787/

10-13 06:53