填充列表的通用方法无法创建T()

时间:2011-04-07 13:28:06

标签: c# generics generic-method

我有下面的通用方法,如果它有效,它将起到作用!但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 个答案:

答案 0 :(得分:8)

where T : new()语法仅允许无参数构造函数。有一些黑客可以做到这一点,否则Activator.CreateInstance应该工作。但是,首选方法是可访问的Init(arg)方法,可能通过接口(也通过where指定)。所以你可以使用:

var newObj = new T();
newObj.Init(mo);
items.Add(newObj);