質問

すべてがインターフェースを実装するクラスのセットがある場合。

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

それらをすべてリストに入れて、列挙します。

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

しかし、コンパイラはTが何であるかを知りたい。これはできますか?どうすればこの問題を克服できますか?

役に立ちましたか?

解決

IMyinterfaceタイプはなく、type引数を必要とするIMyinterface`1タイプのみがあります。 IMyinterfaceタイプを作成できます:-

interface IMyinterface { ... }

それから継承する

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

foreachループで使用するメンバーをIMyinterface定義に移動する必要があります。

他のヒント

署名にTを含むメソッドを呼び出す場合、答えは不可能です。それ以外の場合は、anthonywjonesが示唆するとおりに実行できます

いつでもTが何であるかをコンパイラーに伝える必要がありますが、要求したとおりに行うことができます:

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

List<IMyinterface> list = new List<IMyinterface>();
foreach(IMyinterface a in list){}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top