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

标签 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;
    }

最佳答案

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

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

关于c# - 填充列表的通用方法无法创建 T(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5581860/

相关文章:

java - 使用泛型重构多个重载方法

c# - 为什么 .NET Web 控件事件处理程序不是通用的?

c# - c++/cli 仅将内部成员公开给托管类

c# - 将 HttpRuntime.Cache 项目读取为只读

c# - Expression.Call 重载之间的区别?

java - 是否可以从泛型方法返回原始对象?

c# - C# 如何在 C++ 不允许虚拟模板方法的情况下允许虚拟泛型方法?

c# - 获取 LINQ 表达式中的最早日期

c# - 如何识别对象是否属于基本泛型类型?

C# 动态调用泛型方法