包含型の変数を使用してジェネリック型インスタンスを作成します
C# では、包含型の変数を使用してジェネリック型を直接インスタンス化できないことは直観に反しているように思えるかもしれません。次のコードは問題を示しています:
<code class="language-c#">Type k = typeof(double); List<k> lst = new List<k>(); // 编译错误</code>
このコードは、変数 k を使用してジェネリック型を指定しようとしているため、コンパイルできません。ただし、目的の機能を実現するために使用できる回避策があります。
包含型の変数を使用してジェネリック型インスタンスを作成するには、リフレクションと Activator.CreateInstance() を利用できます。
<code class="language-c#">var genericListType = typeof(List<>); var specificListType = genericListType.MakeGenericType(typeof(double)); var list = Activator.CreateInstance(specificListType);</code>
このコードは次のように機能します:
genericListType
汎用の List<>
型定義を取得します。 MakeGenericType()
はジェネリック型定義を取得し、実際の型パラメーター (この場合は double
) を指定します。 Activator.CreateInstance()
指定された型パラメーターを使用して、特定のジェネリック型をインスタンス化します。 以上が型変数を使用して C# でジェネリック型をインスタンス化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。