类中泛型项的泛型集合

本文关键字:泛型 集合 | 更新日期: 2023-09-27 18:00:15

我正在尝试创建一个接受两种泛型类型(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>();

这有可能吗?

谢谢!

类中泛型项的泛型集合

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

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));
}

我想你可能已经预料到在"where T:IQueue where K:IItem"中有一个序列,但它实际上需要显式定义现在。如果这在未来真的能起作用,那将是一个很好的功能。凭直觉,你的要求对我来说很有意义。

这里有一个建议的方法。

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