C# 如何获取所有类型<;T>;其中T是许多不同的类型?
我有以下C# 如何获取所有类型<;T>;其中T是许多不同的类型?,c#,reflection,C#,Reflection,我有以下类型: IMyType, IMyType<MyClass1>, IMyType<MyClass2>, IMyType<string> 我可以得到一个类型的数组,但它只包含IMyType和IMyType 我是否可以使用反射获取特定类型,例如IMyType?IMyType不是程序集的一部分,这就是为什么GetTypes不返回它的原因。你的程序集包含的是IMyType通用定义,让你创建IMyType,其中T是任何东西(你可以从你的代码或者在运行时使用反射来
类型
:
IMyType,
IMyType<MyClass1>,
IMyType<MyClass2>,
IMyType<string>
我可以得到一个类型的数组
,但它只包含IMyType
和IMyType
我是否可以使用反射获取特定类型,例如IMyType
?IMyType
不是程序集的一部分,这就是为什么GetTypes
不返回它的原因。你的程序集包含的是IMyType
通用定义,让你创建IMyType
,其中T
是任何东西(你可以从你的代码或者在运行时使用反射来实现)。这并不意味着会为其中一个创建新类型,而是会为它们使用泛型定义
我不认为有任何方法可以检查在程序执行的任何给定时间创建了什么IMyType
具体实例
您可以尝试使用静态代码分析工具扫描您的代码库,并查看它被用作给定泛型类型的泛型参数,但我不知道哪些工具具有该功能。您必须解析IL才能真正获得所有用法。但是,如果您只满足于查找使用
IMyType
或IMyType
的类型和方法,则可以使用反射枚举所有加载的程序集中的所有类型,并查看所讨论的类型是否源自IMyType
或IMyType
使用type.IsAssignableFrom()
。然后,枚举类型中的每个方法或属性,并使用相同的机制询问任何参数或返回类型的类型是否来自IMyType
或IMyType
。这是您能做的最好的了。您是指实现IMyType
的所有类型吗?问题不清楚。你打算用那种类型做什么?创建一个实例?您可以创建一个几乎包含任何泛型参数的IMyType
。IMyType可以是任何泛型参数,我想扫描程序集以查看正在使用哪些程序集(如IMyType),“I”前缀通常表示接口。您能提供一个使用反射查找的示例类声明吗?@RJP用于什么目的?没有内置的方法来查看使用了泛型类的哪些实例(它不在程序集的元数据中,就像泛型类型本身一样),因此可能有不同的方法来解决您遇到的任何问题。
typeof(MyCurrentClass).Assembly.GetTypes()
.Where(x => x.Name.Contains("IMyType")).ToArray()