Qual é a maneira mais fácil de saber se um tipo de parâmetro implementa uma interface no c # 2.0?

Por exemplo, dado um método de tipo param, estou procurando algo como a parte em negrito

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

  //Do something   

else

  //Do something else 

}

Anwers usando C# 3.0 também são bem-vindos, mas primeiro descarte os .NET 2.0, por favor;)

0
adicionado editado
Visualizações: 1

3 Respostas

Ï apenas tentei usar

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

E também funciona, mas sua resposta parece mais robusta e era o que eu estava procurando. Obrigado!

0
adicionado
Funcionou para mim no meu caso específico, mas o comportamento é o que você descreve: ele não funciona se você quiser saber se um objeto implementa IMyInterface, mas para afirmar que o tipo T é um IMyInterface. Obrigado pela correção!
adicionado o autor Ricardo Amores, fonte
Isso? só deve funcionar de T é especificamente IMyInterface
adicionado o autor James Curran, fonte

eu acho que

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

também deve funcionar: mas não vejo vantagem ...

0
adicionado

Type.IsAssignableFrom

if(typeof(IMyInterface).IsAssignableFrom(typeof(T)))
{
 //something
}
else
{
 //something else
}
0
adicionado