gpt4 book ai didi

c# - 通用函数将元素添加到列表

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:53 24 4
gpt4 key购买 nike

我想替换 AddQuickElementAddRangeElement具有一个通用功能 AddElement<T> .但是我怎样才能将通用元素添加到 List<Base> list .激活器不起作用。或者有什么更好的方法可以在不进行反射(reflection)的情况下做到这一点?

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
{

}
}

最佳答案

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

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. 有一个公共(public)的无参数构造函数。

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

关于c# - 通用函数将元素添加到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34180651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com