我有下面的通用方法,如果它有效,它将达到它的目的!但是 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;
}
最佳答案
where T : new()
语法只允许无参数 构造函数。有一些 hack 可以做到这一点,否则 Activator.CreateInstance
应该可以工作。但首选方法是可访问的 Init(arg)
方法,可能通过接口(interface)(也通过 where
指定)。所以你可以使用:
var newObj = new T();
newObj.Init(mo);
items.Add(newObj);
关于c# - 填充列表的通用方法无法创建 T(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5581860/