673 Stimmen

Alle Typen ermitteln, die eine Schnittstelle implementieren

Wie kann ich unter Verwendung von Reflection alle Typen, die eine Schnittstelle implementieren, mit C# 3.0/.NET 3.5 mit so wenig Code wie möglich abrufen und Iterationen minimieren?

Das möchte ich neu schreiben:

foreach (Type t in this.GetType().Assembly.GetTypes())
    if (t is IMyInterface)
        ; //do stuff

0voto

Hamdi Baligh Punkte 848

OfType Linq Methode kann genau für diese Art von Szenarien verwendet werden:

https://docs.microsoft.com/fr-fr/dotnet/api/system.linq.enumerable.oftype?view=netframework-4.8

-1voto

Jonathan Santiago Punkte 423
   public IList<T> GetClassByType<T>()
   {
        return AppDomain.CurrentDomain.GetAssemblies()
                          .SelectMany(s => s.GetTypes())
                          .ToList(p => typeof(T)
                          .IsAssignableFrom(p) && !p.IsAbstract && !p.IsInterface)
                          .SelectList(c => (T)Activator.CreateInstance(c));
   }

-4voto

Ryan Rinaldi Punkte 3789

Sie könnten LINQ verwenden, um die Liste zu erhalten:

var types = from type in this.GetType().Assembly.GetTypes()
            where type is ISomeInterface
            select type;

Aber ist das wirklich besser lesbar?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X