.NET将约束通用类型添加到List

时间:2016-03-15 19:28:57

标签: .net generics

我已经约束了泛型方法和指定类型的通用列表。是否有可能将此约束项添加到列表中?

class Test
{ 
    private static Test _instance;
    private List<QueueItem<IData>> queue;

    public static void Enqueue<T>(QueueItem<T> i) where T : IData, new()
    {
        _instance.queue.Add(i); //Fails on compilation
    }
    //...some other code...
}

其他课程是:

public class IData
{
    public IData() { }
}

class QueueItem<T> where T : IData, new()
{
    public SomeUnchangableClass<T> Data {get; set;}
    public string Description { get; set; }
}

我必须保持约束 IData,new(),因为其余的代码。但我不知道为什么我无法将此项添加到通用列表中,因为约束属于同一个类。

1 个答案:

答案 0 :(得分:0)

如果你添加:

,它会编译
class QueueDataItem : QueueItem<IData> {}

并将Test更改为

class Test
{
    private static Test _instance;
    private List<QueueDataItem> queue;

    public static void Enqueue(QueueDataItem i) 
    {
        _instance.queue.Add(i); //Fails on compilation
    }
    //...some other code...
}