Frage

Wenn eine Reihe von Klassen, die alle eine Schnittstelle implementieren.

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

Ich möchte sie alle in einer Liste schieben und durch sie aufzuzählen.

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

aber der Compiler will wissen, was T ist. Darf ich das machen? Wie kann ich dieses Problem überwinden?

War es hilfreich?

Lösung

Es gibt keine IMyInterface Typ gibt es nur ein IMyinterface`1 Typ, der eine Art Argument erfordert. Sie könnten einen IMyInterface Typen erstellen: -

interface IMyinterface { ... }

dann erbt von ihm

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

Sie müssten alle Mitglieder bewegen Sie in der foreach-Schleife auf die IMyInterface Definition verwenden möchten.

Andere Tipps

Wenn Sie eine Methode mit T in der Signatur berufen, ist die Antwort, die Sie nicht können. Ansonsten können Sie tun, wie AnthonyWJones schlägt

Sie müssen noch den Compiler sagen, was T zu einem bestimmten Zeitpunkt ist, aber genau das, was Sie gefragt, getan werden kann:

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

List<IMyinterface> list = new List<IMyinterface>();
foreach(IMyinterface a in list){}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top