我有一个列表,其中必须包含IInteract对象。但是IInteract是通用接口,需要2个类型参数。

我的主要想法是遍历一个对象列表,如果还没有交互,则彼此“交互”。
所以我有这个对象

List<IObject> WorldObjects = new List<IObject>();


还有这个:

private List<IInteract> = new List<IInteract>();


除非我不能编译最后一行,因为IInteract需要2个类型参数。但是我不知道这些参数是什么,除非添加它们。我可以在类型A和A ...或类型B和C的对象之间添加交互。

我想创建“交互”类,以对“作用”对象和“目标”对象做一些事情,但是我希望它们与对象独立...因此我可以在例如之间添加交互...” SuperUltraClass”和“一个整数”。

我使用错误的方法吗?

最佳答案

假设IInteract被定义为类似

interface IInteract<T1, T2>


并且您将其用于Foo类的字段:

class Foo
{
  List<IInteract...> field;
}


然后,如果要推迟决定将哪种类型绑定到IInteract类型争论的决定,则需要对容器类进行参数化:

class Foo<T1, T2>
{
   List<IInteract<T1, T2>> field;
}


当您定义容器类的具体实例时,将绑定IInteract的类型参数,例如:var x = new Foo<int, double>().对于Foo泛型的特定实例,这将导致IInteract字段的类型为IInteract<int, double>

关于c# - 如何创建包含打开的通用接口(interface)的List <T>?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4521587/

10-10 10:25