Listar tipos fechados que o tempo de execução criou a partir de tipos genéricos abertos
Quando eu listo todos os tipos no AppDomain atual, vejo meus tipos genéricos com os espaços reservados genéricos. No entanto, se eu instanciar meus tipos genéricos com um tipo e listar todos os tipos no appDomain, não vejo os tipos fechados recém-criados.
No exemplo abaixo, a saída é apenas:
Foo`1[T]
Eu estou procurando o tipo fechado:
Foo`1[System.Int32]
Existe uma maneira de ver os tipos fechados que o tempo de execução criou para mim com base em meus tipos genéricos abertos?
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());
}
}
Eu também tentei encontrar todos os tipos pelo argumento genérico na esperança de descobrir o tipo fechado.
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());
}
}
Isso é só para satisfazer minha curiosidade.