Wyświetl listę zamkniętych typów utworzonych przez środowisko wykonawcze z otwartych typów ogólnych

Kiedy wymieniam wszystkie typy w bieżącej domenie aplikacji, widzę moje typy ogólne z ogólnymi symbolami zastępczymi. Jeśli jednak utworzę moje typy ogólne za pomocą typu, a następnie wylistuję wszystkie typy w appDomain, nie widzę nowo utworzonych typów zamkniętych.

W poniższym przykładzie dane wyjściowe są następujące:

Foo`1[T]

Szukam typu zamkniętego:

Foo`1[System.Int32]

Czy istnieje sposób, aby zobaczyć zamknięte typy utworzone przez środowisko wykonawcze w oparciu o moje otwarte typy ogólne?

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

Próbowałem również znaleźć wszystkie typy za pomocą ogólnego argumentu w nadziei na odkrycie typu zamkniętego.

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

To tylko po to, by zaspokoić moją ciekawość.

questionAnswers(2)

yourAnswerToTheQuestion