我可以返回特定泛型类型的所有通用对象吗?

Sam*_*der 4 .net generics

我有一个界面:

public interface InterfaceA<S,T>{}
Run Code Online (Sandbox Code Playgroud)

我想加载实现此接口的所有类的实例,而不管通用参数ST.所以我有一个类,有一个方法来做到这一点.方法签名目前是:

public IEnumerable<object> GetInstancesOfImplementingTypes (Type targetType)
Run Code Online (Sandbox Code Playgroud)

通过加载的程序集查找具有一个类型,以反映GetGenericTypeDefinition等于所述GetGenericTypeDefinitiontargetType.我正在使用类型(而不是在方法上有一个T param),所以我不必指定泛型参数,即我可以像这样调用它:

var foundinstances = o.GetInstancesOfImplementingTypes(typeof(InterfaceA<,>))
Run Code Online (Sandbox Code Playgroud)

但我似乎必须将找到的类型的实例作为对象返回.是否有某种方式我可以返回一个比仅仅对象更受约束的类型,因为我知道所有实例都将是一些实现InterfaceA,我只是不知道什么ST将来.

Sve*_*ven 5

否.InterfaceA<S,T>就CLR而言,不同的实例化是无关的,因此除非它们具有非通用的公共基础,否则必须使用对象.

如果InterfaceA中有一些成员不依赖于类型参数,并且您希望无论S和T是否都可以访问,那么您可能希望创建另一个InterfaceA继承的非泛型接口,仅包含那些成员.