C#通用类<;T>;

C#通用类<;T>;,c#,list,class,generics,add,C#,List,Class,Generics,Add,如何将泛型类型添加到列表中? 我试图创建一个T的对象,但这也不起作用 class Bar<T> where T : IDrink { List<T> storage = new List<T>(); public void CreateDrink() { storage.Add(T); //<- This doesn't work } } 类栏,其中T:IDrink { 列表存储=新列表(); 公共饮料

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

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

    public void CreateDrink()
    {
        storage.Add(T); //<- This doesn't work
    }
}
类栏,其中T:IDrink
{
列表存储=新列表();
公共饮料
{
存储。添加(T);//您可以像这样执行:

storage.Add(Activator.CreateInstance<T>()); 
storage.Add(Activator.CreateInstance());

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

如果要创建实例,则泛型约束必须包括

类栏,其中T:IDrink,new()
{
列表存储=新列表();
公共饮料
{
添加(新的T());
}
}
新约束指定泛型类中的任何类型参数 声明必须具有公共无参数构造函数。若要使用 新约束,类型不能是抽象的

尝试
storage.Add(default(T));
使用
default(T)
不会创建
T
的实例,它会为引用类型提供
null
,为值类型提供默认值。
class Bar<T> where T : IDrink, new()
{
    List<T> storage = new List<T>();

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