泛型函数将元素添加到列表中
本文关键字:列表 添加 元素 函数 泛型 | 更新日期: 2023-09-27 18:26:13
我想用一个通用函数AddElement<T>
替换AddQuickElement
和AddRangeElement
。但是我怎样才能将泛型元素添加到List<Base> list
中呢。激活器不工作。或者,有什么更好的方法可以做到这一点而不需要反思?
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
- 源自
Base
- 具有公共的无参数构造函数
(1) 允许您将T
的实例添加到List<Base>
,(2)允许您使用new T()
创建T
的新实例。