首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型函数将元素添加到列表

泛型函数将元素添加到列表
EN

Stack Overflow用户
提问于 2015-12-09 13:59:16
回答 1查看 54关注 0票数 1

我想用一个泛型函数AddQuickElementAddRangeElement代替AddElement<T>。但是如何将泛型元素添加到List<Base> list中。活化剂不起作用。或者,有什么更好的方法来使这不经过反思呢?

代码语言:javascript
复制
namespace ConsoleApplication
{
class Program
{
    static void Main(string[] args)
    {
        List<Base> list = new List<Base>();
        AddQuickElement(list,5);
        AddRangeElement(list, 5);
        AddElement<Quick>(list,5);
        Console.WriteLine(list.Count);
        Console.ReadKey();
    }
    public static void AddQuickElement(List<Base> list, int number)
    {
        for (int i = 0; i < number; i++)
        {
            list.Add(new Quick());
        }
    }
    public static void AddRangeElement (List<Base> list, int number)
    {
        for (int i = 0; i < number; i++)
        {
            list.Add(new Range());
        }
    }
    public static void AddElement<T>(List<Base> list, int number)
    {
        Type type = typeof(T);
        var element = Activator.CreateInstance(type);
        // list.Add(element); // do not work
    }
}
public abstract class Base
{

}

public class Quick:Base
{

}

public class Range : Base
{

}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-09 14:04:08

您需要将类型参数约束为AddElement方法。

代码语言:javascript
复制
public static void AddElement<T>(List<Base> list, int number) where T : Base, new()
{
    for (int i = 0; i < number; i++)
    {
        list.Add(new T());
    }
}

类型约束where T : Base, new()意味着类型T

  1. 派生自Base
  2. 具有公共的无参数构造函数。

(1)允许将T的实例添加到List<Base>,(2)允许使用new T()创建T的新实例。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34180651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档