2008-09-19 4 views

Antwort

11

Wenn Sie nur sehen möchten, ob ein Typ eine bestimmte Schnittstelle implementiert, ist beides in Ordnung, obwohl GetInterface() wahrscheinlich schneller ist, da IsAssignableFrom() mehr interne Prüfungen durchführt als GetInterface(). Es wird wahrscheinlich noch schneller sein, die Ergebnisse von Type.GetInterfaces() zu überprüfen, die dieselbe interne Liste zurückgeben, die beide anderen Methoden sowieso verwenden.

1

Es gibt einen Unterschied darin, wie interne Klassen behandelt werden. Nehmen Sie die folgende Klasse:

public interface IFoo 
{ 
}  

internal class Foo: IFoo 
{ 
} 

Dies wird Ihnen eine Liste von einem Artikel:

var types = typeof(IFoo).Assembly.GetTypes() 
      .Where(x => x.GetInterface(typeof(IFoo).FullName) != null) 
      .ToList(); 

Während dies wird Ihnen eine leere Liste:

var types = typeof(IFoo).Assembly.GetTypes() 
      .Where(x => x.IsAssignableFrom(typeof(IFoo)) 
      .ToList();