Tworzenie zmiennych ogólnych z typu - jak? Lub użyj Activator.CreateInstance () z właściwościami {} zamiast parametrów ()?
Obecnie używam Generics do tworzenia dynamicznych metod, takich jak tworzenie obiektu i wypełnianie właściwości wartościami.
Czy jest jakiś sposób, aby „dynamicznie” utworzyć Generic bez znajomości typu? Na przykład:
List<String> = new List<String>()
jest sposobem predefiniowanym, ale
List<(object.GetType())> = new List<(object.GetType()>()
nie działa ... Ale może?
To nie działa (Czy istnieje podobne podejście, które działa?)
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);
}
}
W skrócie: jak wziąć „typ” i stworzyć z niego obiekt bez użycia generycznych? Do tej pory korzystałem tylko z Generics w metodach, ale czy możliwe jest użycie tej samej metody dla zmiennych? Muszę zdefiniować Generic (T) przed metodą, więc czy mogę zrobić to samo na zmiennych przed ich „stworzeniem”?
... lub jak użyć "Activatora" do utworzenia obiektu z Właściwościami zamiast Parametrów. Tak jak tutaj:
// Z wartościami parametrów
Test t = new Test("Argument1", Argument2);
// Z właściwościami
Test t = new Test { Argument1 = "Hello", Argument2 = 123 };