Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取所有类型<;T>;其中T是许多不同的类型?_C#_Reflection - Fatal编程技术网

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