【问题标题】:C# Generic Class<T>C# 泛型类<T>
【发布时间】:2015-07-15 09:58:03
【问题描述】:

如何将通用类型添加到我的列表中? 我试图创建一个 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));
  • 使用default(T)不会创建T的实例,它将为引用类型提供null,为值类型提供默认值。

标签: c# list class generics add


【解决方案1】:

T 是一种类型,而不是该类型的实例。所以你需要CreateDrink 中的参数或者使用工厂方法返回T 的新实例。

如果你想创建一个实例,通用约束必须包含new()

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

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

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

【讨论】:

    【解决方案2】:

    你可以这样做:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      • 1970-01-01
      相关资源
      最近更新 更多