C#泛型类<T>

3

如何向我的列表中添加泛型类型? 我尝试创建一个T类型的对象,但这也不起作用。

class Bar<T> where T : IDrink
{
    List<T> storage = new List<T>();

    public void CreateDrink()
    {
        storage.Add(T); //<- This doesn't work
    }
}

尝试使用 storage.Add(default(T)); - rt2800
1
使用 default(T) 不会创建 T 的实例,它将为引用类型提供 null,对于值类型则提供默认值。 - Steve Lillis
2个回答

5

T是一种类型而不是该类型的实例。因此,您需要在CreateDrink中添加一个参数或使用返回T新实例的工厂方法。

如果您想创建一个实例,则泛型约束必须包括new()

class Bar<T> where T : IDrink, new()
{
    List<T> storage = new List<T>();

    public void CreateDrink()
    {
        storage.Add(new T()); 
    }
}

新的限制规定泛型类声明中的任何类型参数都必须有一个公共的无参构造函数。要使用新的限制,该类型不能是抽象的。

3
您可以这样做:
storage.Add(Activator.CreateInstance<T>()); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接