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

Jim*_*mbo 2 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;
    }
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 8

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

var newObj = new T();
newObj.Init(mo);
items.Add(newObj);
Run Code Online (Sandbox Code Playgroud)