Общий метод для заполнения списка не может создать T()
У меня есть общий метод ниже, который будет служить своей цели, если он работает! Но items.Add(new T(mo));
Часть не будет компилироваться, потому что я использую конструктор. Кто-нибудь может помочь?
private List<T> Items<T>(string query) where T : new()
{
List<T> items = new List<T>();
ManagementObjectCollection moc = new ManagementObjectSearcher(query).Get();
foreach (ManagementObject mo in moc)
items.Add(new T(mo));
return items;
}
1 ответ
Решение
where T : new()
синтаксис допускает только конструкторы без параметров. Есть несколько хаков, чтобы сделать это, иначе Activator.CreateInstance
должно сработать. Но предпочтительный подход будет доступным Init(arg)
метод, возможно, через интерфейс (также указывается через where
). Таким образом, вы можете использовать:
var newObj = new T();
newObj.Init(mo);
items.Add(newObj);