Список закрытых типов, созданных во время выполнения из открытых универсальных типов

Когда я перечисляю все типы в текущем AppDomain, я вижу свои общие типы с общими заполнителями. Однако, если я создаю экземпляры моих универсальных типов с типом, а затем перечисляю все типы в домене приложения, я нене видеть вновь созданные закрытые типы.

В приведенном ниже примере вывод только:

Foo`1[T]

ищу закрытый тип:

Foo`1[System.Int32]

Есть ли способ увидеть закрытые типы, которые среда выполнения создала для меня на основе моих открытых универсальных типов?

class Foo
{
}

class Program
{
    static void Main(string[] args)
    {
        var tmp = new Foo();
        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
{
}

class Bar
{
}

class Program
{
    static void Main(string[] args)
    {
        var tmp = new Foo();
        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());
    }
}

Это просто для удовлетворения моего любопытства.

Ответы на вопрос(2)

Ваш ответ на вопрос