我有下面的通用方法,如果它有效,它将起到作用!但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;
}
答案 0 :(得分:8)
where T : new()
语法仅允许无参数构造函数。有一些黑客可以做到这一点,否则Activator.CreateInstance
应该工作。但是,首选方法是可访问的Init(arg)
方法,可能通过接口(也通过where
指定)。所以你可以使用:
var newObj = new T();
newObj.Init(mo);
items.Add(newObj);