Obecnie używam Generics do tworzenia dynamicznych metod, takich jak tworzenie obiektów i wypełnianie właściwości wartościami.Tworzenie zmiennych ogólnych z typu - Jak? Lub użyj Activator.CreateInstance() z właściwościami {} zamiast parametrów()?
Czy istnieje sposób na "dynamiczne" tworzenie generycznych bez znajomości typu? Na przykład:
List<String> = new List<String>()
jest predefinied sposób, ale
List<(object.GetType())> = new List<(object.GetType()>()
nie działa ... ale może?
To nie działa (Czy istnieje podobna 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);
}
}
Więc w skrócie: jak zrobić „typ” i utworzyć obiekt od tego bez użycia Generics? Dotychczas stosowałem tylko generyczne metody, ale czy można używać tych samych metod do zmiennych? Muszę zdefiniować rodzajowy (T) przed metodą, więc czy mogę zrobić to samo na zmiennych przed ich "utworzeniem"?
... lub jak użyć "Activator", aby utworzyć obiekt z właściwościami zamiast parametrów. Jak to zrobić tutaj:
// Z parametrów wartości
Test t = new Test("Argument1", Argument2);
// o właściwościach
Test t = new Test { Argument1 = "Hello", Argument2 = 123 };
Nie chcę używać "List" w tym przypadku, powinien to być dowolny obiekt. "Typ openListType = typeof (nieznany typ);" – Deukalion
Nie widzę, jak ta odpowiedź rozwiązuje OP "użyj Activator.CreateInstance() z właściwości {} zamiast parametrów()?" – Avishek