現在の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());
}
}
これは私の好奇心を満たすためだけのものです。