Abgeleitete Typen effizient identifizieren
In .NET ist das Finden aller abgeleiteten Typen eines bestimmten Typs eine nützliche Aufgabe, die häufig bei Laufzeitvorgängen auftritt. Ein gängiger Ansatz besteht darin, alle Typen in geladenen Assemblys zu durchlaufen und die Zuweisung zum Zieltyp zu prüfen. Diese Methode kann jedoch sowohl langsam als auch voller Code sein.
Eine leistungsfähigere und elegantere Lösung besteht darin, die Leistungsfähigkeit von LINQ zu nutzen:
var listOfDerived = ( from domainAssembly in AppDomain.CurrentDomain.GetAssemblies() from type in domainAssembly.GetTypes() where typeof(BaseType).IsAssignableFrom(type) select type).ToArray();
Diese Linq-Abfrage durchsucht effizient alle Assemblys und ihre Typen, wobei nur diejenigen ausgewählt werden, die vom angegebenen Basistyp erben.
Optimierung und Zusätzliche Überlegungen
Um die Leistung weiter zu optimieren, sollten Sie die Verwendung von domainAssembly.GetExportedTypes() anstelle von GetTypes() in Betracht ziehen. Dadurch werden nur öffentlich sichtbare Typen abgerufen, wodurch möglicherweise die Anzahl der erforderlichen Prüfungen reduziert wird.
Beachten Sie außerdem, dass IsAssignableFrom den Basistyp selbst enthält. Schließen Sie es bei Bedarf aus, indem Sie && type != typeof(BaseType) hinzufügen. Um nur nach konkreten Klassen zu filtern, schließen Sie && !type.IsAbstract ein.
Fazit
Durch die Verwendung von LINQ und die Berücksichtigung dieser Optimierungen wird das Auffinden abgeleiteter Typen äußerst effizient und unkompliziert Aufgabe, wodurch die Leistung und Lesbarkeit Ihres Codes erheblich verbessert wird.
Das obige ist der detaillierte Inhalt vonWie kann ich effizient alle abgeleiteten Typen eines bestimmten Typs in .NET finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!