Frage

Mit Reflexion in .Net, was ist die differnce zwischen:

   if (foo.IsAssignableFrom(typeof(IBar)))

Und

   if (foo.GetInterface(typeof(IBar).FullName) != null)

Welche ist besser geeignet, warum?

Wenn könnte der eine oder andere nicht?

War es hilfreich?

Lösung

Wenn Sie nur wollen, um zu sehen, ob eine Art, die eine bestimmte Schnittstelle implementiert, entweder ist in Ordnung, obwohl GetInterface () ist wahrscheinlich schneller, da IsAssignableFrom () macht mehr internen Kontrollen als GetInterface (). Es wird wohl noch schneller die Ergebnisse der Type.GetInterfaces zu überprüfen (), die die gleiche interne Liste zurückgibt, die beiden anderen Methoden sowieso verwenden.

Andere Tipps

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

public interface IFoo
{
}    

internal class Foo: IFoo
{
}

Dies wird Ihnen eine Liste mit einem Element:

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top