当我列出当前 AppDomain 中的所有类型时,我会看到我的泛型类型带有泛型占位符。但是,如果我用一个类型实例化我的泛型类型,然后列出 appDomain 中的所有类型,我看不到新创建的封闭类型。
在下面的示例中,输出仅为:
Foo`1[T]
我正在寻找封闭类型:
Foo`1[System.Int32]
有没有办法根据我的开放泛型类型查看运行时为我创建的封闭类型?
class Foo<T>
{
}
class Program
{
static void Main(string[] args)
{
var tmp = new Foo<int>();
ListTypes();
}
private static void ListTypes()
{
var types = from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
where type.Name.Contains("Foo")
select type;
foreach (var type in types)
Console.WriteLine(type.ToString());
}
}
我还尝试通过泛型参数查找所有类型,以期发现封闭类型。
class Foo<T>
{
}
class Bar
{
}
class Program
{
static void Main(string[] args)
{
var tmp = new Foo<Bar>();
ListTypes();
}
private static void ListTypes()
{
var types = from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
where type.IsGenericType
&& type.GetGenericArguments().Contains(typeof(Bar))
select type;
foreach (var type in types)
Console.WriteLine(type.ToString());
}
}
这只是为了满足我的好奇心。