Was ist der leichtere Weg zu wissen, ob ein Typ-Parameter eine Schnittstelle in c # 2.0 implementiert?

Zum Beispiel suche ich bei einer Typ-Param-Methode nach dem fett gedruckten Teil

void MyMethod< T >() {
if ( typeof(T).Implements( IMyInterface ) ) {

  //Do something   

else

  //Do something else 

}

Anwers mit C# 3.0 sind ebenfalls willkommen, aber bitte zuerst die .NET 2.0-Dateien löschen;)

0
hinzugefügt bearbeitet
Ansichten: 53

3 Antworten

Ich habe gerade versucht zu verwenden

if( typeof(T).Equals(typeof(IMyInterface) ) 
     ...

Und das funktioniert auch, aber deine Antwort scheint robuster zu sein und das was ich gesucht habe. Vielen Dank!

0
hinzugefügt
Es funktionierte für mich in meinem speziellen Fall, aber das Verhalten ist das, das Sie beschreiben: Es funktioniert nicht, wenn Sie wissen wollen, ob ein Objekt IMyInterface implementiert, aber um zu behaupten, dass der Typ T ein IMyInterface ist. Danke für die Korrektur!
hinzugefügt der Autor Ricardo Amores, Quelle
Es tut? es sollte nur funktionieren von T ist speziell IMyInterface
hinzugefügt der Autor James Curran, Quelle

Ich denke

if (typeof (IMyInterFace).IsAssignableFrom(typeof(T))

sollte auch funktionieren: aber ich sehe keinen Vorteil ...

0
hinzugefügt

Type.IsAssignableFrom

if(typeof(IMyInterface).IsAssignableFrom(typeof(T)))
{
 //something
}
else
{
 //something else
}
0
hinzugefügt