以下の例は、その意図を示しています。この例では、オブジェクトの配列を反復処理し、デフォルト値がロードされた同じタイプの配列を作成しています。値自体をあるリストから次のリストにコピーする必要はありません。これは、リストの「タイプクローン」のようなものです。
以下のコードは、アクティベーターに対して次のエラーを生成します。
「System.Int32はGenericTypeDefinitionではありません。MakeGenericTypeは、Type.IsGenericTypeDefinitionがtrueであるタイプでのみ呼び出すことができます。」
Activator、CreateInstance、およびMakeGenericTypeの詳細は、まだ少し混乱しています。
エラーを回避するためにコードを変更するにはどうすればよいですか?
任意の提案をいただければ幸いです。
private void Test()
{
object[] a = new object[] {100, "Text", new clsMyClass()};
object[] b = new object[a.Length];
for (int i = 0; i < a.Length; i++)
{
b[i] = Activator.CreateInstance(a[i].GetType().MakeGenericType());
}
for (int i = 0; i < b.Length; i++)
{
Console.WriteLine(b[i].GetType().ToString());
}
}
期待される出力は次のようになります。
- System.Int32
- System.String
- MyNamespace.clsMyClass
結果の値は次のようになります。
- b [0] = 0
- b [1] = ""
- b[2]=新しいclsMyClass