填充列表的泛型方法不能创建T()
本文关键字:创建 不能 列表 泛型方法 填充 | 更新日期: 2023-09-27 17:49:36
我有下面的通用方法,它将服务于它的目的,如果它工作!但是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()
语法只允许无参数构造函数。有一些黑客可以做到这一点,否则Activator.CreateInstance
应该工作。但首选的方法是可访问的Init(arg)
方法,可能通过接口(也通过where
指定)。所以你可以使用:
var newObj = new T();
newObj.Init(mo);
items.Add(newObj);