私は現在、ジェネリックスを使用して、オブジェクトの作成やプロパティへの値の入力など、いくつかの動的なメソッドを作成しています。
タイプを知らなくても「動的に」ジェネリックを作成する方法はありますか?例えば:
List<String> = new List<String>()
事前に定義された方法ですが、
List<(object.GetType())> = new List<(object.GetType()>()
動作していません...しかし、それはできますか?
これは機能していません(機能する同様のアプローチはありますか?)
public T CreateObject<T>(Hashtable values)
{
// If it has parameterless constructor (I check this beforehand)
T obj = (T)Activator.CreateInstance(typeof(T));
foreach (System.Reflection.PropertyInfo p in typeof(T).GetProperties())
{
// Specifically this doesn't work
var propertyValue = (p.PropertyType)values[p.Name];
// Should work if T2 is generic
// var propertyValue = (T2)values[p.Name];
obj.GetType().GetProperty(p.Name).SetValue(obj, propertyValue, null);
}
}
つまり、ジェネリックスを使用せずに「タイプ」を取得してそこからオブジェクトを作成する方法は?これまでメソッドでジェネリックを使用しただけですが、変数でも同じように使用できますか?メソッドの前にGeneric(T)を定義する必要があるので、変数を「作成」する前に変数に対して同じことを行うことはできますか?
...または「アクティベーター」を使用して、パラメーターの代わりにプロパティを使用してオブジェクトを作成する方法。あなたがここで行うように:
//パラメータ値を使用
Test t = new Test("Argument1", Argument2);
//プロパティ付き
Test t = new Test { Argument1 = "Hello", Argument2 = 123 };