1

如果有一组类都实现了一个接口。

interface IMyinterface<T>
{
    int foo(T Bar);
}

我想把它们全部塞进一个列表中并列举它们。

 List<IMyinterface> list
 foreach(IMyinterface in list)
 // etc...  

但编译器想知道 T 是什么。我可以这样做吗?我该如何克服这个问题?

4

3 回答 3

7

没有 IMyinterface 类型,只有 IMyinterface`1 类型需要类型参数。您可以创建一个 IMyinterface 类型:-

interface IMyinterface { ... }

然后继承它

interface IMyinterface<T> : IMyinterface { ... }

您需要将要在 foreach 循环中使用的任何成员移动到 IMyinterface 定义。

于 2008-11-22T12:30:57.667 回答
1

如果您计划调用签名中带有 T 的方法,答案是您不能。否则,您可以按照 anthonywjones 的建议进行操作

于 2008-11-22T12:32:50.660 回答
1

您仍然需要在某个时候告诉编译器 T 是什么,但是您可以按照您的要求完成:

 interface IMyinterface
{
    int foo<T>(T Bar);
}

List<IMyinterface> list = new List<IMyinterface>();
foreach(IMyinterface a in list){}
于 2008-11-22T13:13:58.173 回答