場合によっては、実行時に決定された型に基づいてジェネリック型のインスタンスを動的に作成することが必要になる場合があります。ジェネリック型は通常コンパイル時に定義されるため、これは困難な場合があります。
これを達成する 1 つの方法は、リフレクションを利用することです。これは、ターゲット型を含む変数を使用してジェネリック型インスタンスを作成できる回避策です:
<code class="language-csharp">Type k = typeof(double); Type genericListType = typeof(List<>); // 注意这里<> var specificListType = genericListType.MakeGenericType(k); var list = Activator.CreateInstance(specificListType);</code>
MakeGenericType
メソッドは、単一の Type
パラメーターを受け入れ、指定された型パラメーターを持つジェネリック型を表す新しい Type
オブジェクトを返します。この場合、double
の Type
を渡してターゲットのタイプを指定します。
特定のジェネリック型を取得した後、Activator.CreateInstance
メソッドを使用してこの型のオブジェクトをインスタンス化できます。このメソッドは、リフレクションを使用して、指定されたオブジェクト タイプの新しいインスタンスを動的に作成します。
このアプローチを使用すると、実行時に決定された型に基づいてジェネリック型のインスタンスを動的に作成できるため、柔軟性とコードの適応性が向上します。 ジェネリック型 typeof(List)
を正しく表すには、typeof(List<>)
を List<T>
に変更する必要があることに注意してください。
以上が実行時にジェネリック型インスタンスを動的に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。