Когда я перечисляю все типы в текущем 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());
}
}
Это просто для удовлетворения моего любопытства.