2016-08-03 7 views
1

次のコードがありますが、実行することはできません。 すべて指定したタイプのリストからインスタンスのリストを作成したいと思います。タイプのリストからインスタンスを取得する

List<Type> types = new List<Type> 
{ 
    typeof(String), 
    typeof(Double), 
    typeof(Object) 
}; 

List<object> instances = types.Select(t => Activator.CreateInstance(t) as t); 

私はここでコンパイルエラーが原因あなたがautoにコンパイラを許可していないトンとしてを言うことによって、オブジェクトを型にキャストするという事実にある

> t is a variable but is used like a type 
+2

"*私はそれを実行できません*"さらにエクスカリンできますか? –

+0

私は文法エラーで私が得ている質問を編集しました。 – heltonbiker

+1

これは実際の型にキャストしようとするとコンパイルされません。List instances = types.Select(t => Activator.CreateInstance(t))。しかし、これは実行時に破損します。これらのすべてがデフォルトコンストラクタを持っているわけではありません。 –

答えて

2

エラーが発生します。このコードは、リスト内のすべての型にデフォルトコンストラクタ(stringにはデフォルトのコンストラクタがありません)が必要であるため、まだバグがあります。

+0

コメント内のコードが機能し、コード内の型は例として意味します。私は 'List 'を作成し、派生型を使用して多相インスタンスを作成する予定です。 – heltonbiker

+0

ここに目的が何であるか正確には分かりませんが、このようなコードを書きましたが、それは狂ったにおいがするようなコードであることが判明しました。 –

+0

私はアプリケーションに実行させたい計算をいくつか持っています。私が作成した 'Selection'インスタンスごとに計算が必要なので、計算の種類ごとにクラスがあります。私は、アプリケーションの起動時に、IoCまたは動的DLLのロードによって、インスタンス化できるすべての計算のリストを作成したいと考えています。基本クラス 'Calculation'を持ち、' ​​MaxCalculation'、 'AverageCalculation'などをサブクラス化していれば、' Calculation'の各サブクラスのインスタンスが1つ必要です。そして、私のコードが今のように匂いがするのは完全に同意します。 – heltonbiker

関連する問題