オブジェクトをインスタンス化するときに渡された型と同じ型を使用するジェネリックメソッドを持っています。実行時に、私はそのオブジェクト名の文字列表現で渡す必要のあるオブジェクトの名前しか知りません。私はActivatorを使用し、おそらく動的を使用することについていくつかのことを読んだことがありますが、私はこの作業をどのように行う必要があるかについて私の頭を覆すことはできません。ジェネリック型のクラスのインスタンスを作成し、実行時にオブジェクトの文字列名から同じジェネリック型のメソッドを呼び出す
public class MyClass<T> where T : class, new()
{
public IList<T> MyMethod(Stream stream)
{
var data = new List<T>();
// stuff to create my list of objects
return data;
}
}
私は、文字列として渡しているオブジェクトの名前に基づいてMyMethodは()メソッドから、私のIListを返す必要があります。ここに私のジェネリッククラスがどのように見えるかの抜粋です。
私はちょうど文字列のスイッチ/ケースを行い、 "本当の"オブジェクトへの参照でケース内のMyClassをインスタンス化することができますが、より良い(より短く、よりクリーンな)方法があれば疑問に思っていますこの。
public class MyClass<T> where T : class, new()
それは基本的にが "Tがクラスで、デフォルトのコンストラクタを持つ必要がある" と言う:
TIA
あなたはアイテムのタイプが 'T'であるが、タイプは文字列から来ていると言っているように聞こえるかもしれません。 –
私は、クラスの名前を文字列として渡すことによってジェネリック型をインスタンス化したいと思っています。その文字列から汎用のIList <>を宣言したいのですが正しい? – entropic
これはまさに正しいことです。モデル名(T)をデータベースの文字列値から取得する予定です。だから私はMyClassオブジェクトを作成し、モデルの文字列表現から生成しなければならないTを渡すことで、MyMethodメソッドを自分のオブジェクトのインスタンス上で呼び出すことができる必要があります。 jgauffinの答えをより明確にするためのコメントを見てください。 –