C#Generic Class <T>

Dan*_*xo 3 c# generics class list add

如何将通用类型添加到我的列表中?我试图创建一个T的对象,但这也不起作用.

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

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

Tim*_*ter 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()); 
    }
}
Run Code Online (Sandbox Code Playgroud)

新约束指定泛型类声明中的任何类型参数都必须具有公共无参数构造函数.要使用新约束,类型不能是抽象的.