类中通用项的通用集合?

时间:2011-06-23 11:26:00

标签: c# .net generics .net-2.0

我正在尝试创建一个接受两种泛型类型的类(IQueue,IItem),例如:

public class Coordinator<T,K>
    where T : IQueue<K>
    where K : IItem
{
    private T<K> collection = new T<K>();
}

其中:

public interface IQueue<T> where T : IItem
{
}

public class MyQueue<T> : IQueue<T>
    where T : IItem
{
}

但编译器不喜欢:

private T<K> collection = new T<K>();

这一切都可能吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

我认为您需要执行以下操作:

public interface IQueue<T> where T : IItem
{
}

public class MyQueue<T> : IQueue<T>
    where T : IItem
{
}

因为您说:协调员获得了IQueue,但您正在尝试使用更具体的信息构建MyQueue。

使用已经讨论过的Activator,您可以在没有编译器错误的情况下执行此操作:

class Coordinator <T,K>
    where T : IQueue<K>
    where K : IItem
{
    private T collection = (T)Activator.CreateInstance(typeof(T));
}

答案 1 :(得分:0)

我想你可能已经预料到“在哪里T:IQueue其中K:IItem”有一个序列,但它实际上需要明确定义现在。如果这在将来确实有用,那将是一个很好的功能。直觉上你的要求对我有意义。

这是建议的方法来接近它。

public class Coordinator<T> where T : IQueue<T>, new()
{
    private T collection = new T();  
}
public interface IQueue<T>{}
public interface IItem{}