1

System.Collections.Generic.List<String>Reflectionを使用してインスタンスを初期化する必要があります。たとえば、型名が XML から読み込まれ、プログラムが起動される前は不明です。タイプとそのアセンブリを取得しました:

Type T = Type.GetType("System.Collections.Generic.List`1[System.String]");
Assembly ass = T.Assembly;

この後、変数を初期化する必要がありますが、型を明示的に記述したくないため、次を使用します。

var lst = ass.CreateInstance(T.FullName) as List<String>;

不適切です。T で必要な型を既に取得しているので、次のようなことができる場合:

var lst = ass.CreateInstance(T.FullName) as T;

大丈夫なはずです。しかし、私はできません。どうすればいいですか?

4

1 に答える 1

2

「変数」型の変数を宣言することはできません。C# は厳密に型指定された言語であるため、変数/プロパティ/メソッド/パラメーター/クラス/その他すべてをコンパイル時に事前に知っておく必要があります。

あなたの例のように動的に生成されたデータ型を処理する唯一の実際の方法は、コンパイル時に不明であっても、何でも含むことができるtype-unsafeobjectまたはを使用することです。dynamicまた、構文は実際には変数ではないことを覚えておいてください。varこれは、 の右側の型から取得される実際の型を記述することを避けるための単なる構文糖衣である=ため、目的にはまったく役に立ちません。

于 2013-10-12T13:59:48.813 に答える