リフレクションを使用して情報のみを入力するC#配列を作成するにはどうすればいいですか? [重複] 質問する

リフレクションを使用して情報のみを入力するC#配列を作成するにはどうすればいいですか? [重複] 質問する

これをどうやって動作させるかが分かりません:

object x = new Int32[7];
Type t = x.GetType();

// now forget about x, and just use t from here.

// attempt1 
object y1 = Activator.CreateInstance(t); // fails with exception

// attempt2
object y2 = Array.CreateInstance(t, 7);  // creates an array of type Int32[][] ! wrong

秘密のソースは何ですか? 配列の要素の型を取得できれば 2 番目の方法を機能させることができますが、それもまだわかりません。

ベストアンサー1

Type.GetElementType()配列以外の型を取得する必要があります:

object x = new Int32[7];
Type t = x.GetType();
object y = Array.CreateInstance(t.GetElementType(), 7);

あるいは、要素の型を直接取得できる場合は、それを使用します。

Type t = typeof(int);
object y = Array.CreateInstance(t, 7);

基本的に、Array.CreateInstance最終的な配列の型ではなく、作成する配列の要素の型が必要です。

おすすめ記事