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ść.