2

我有下面的通用方法,如果它有效,它将达到它的目的!但是该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;
    }
4

1 回答 1

8

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

var newObj = new T();
newObj.Init(mo);
items.Add(newObj);
于 2011-04-07T13:30:34.137 回答