Abrufen von Eigenschaften mit benutzerdefinierten Attributen: Ein effizienter Ansatz
Bei der Arbeit mit Reflektion in .NET ist es oft notwendig, Typen und ihre Mitglieder zu untersuchen um auf bestimmte Informationen zuzugreifen. Ein häufiges Szenario besteht darin, eine Liste von Eigenschaften abzurufen, die mit einem bestimmten benutzerdefinierten Attribut gekennzeichnet sind. Diese Aufgabe kann mit der Methode GetCustomAttributes() erledigt werden, es gibt jedoch eine effizientere und prägnantere Methode.
Beachten Sie den folgenden Codeausschnitt, der darauf abzielt, Eigenschaften mit dem MyAttribute-Attribut abzurufen:
foreach (PropertyInfo prop in t.GetProperties()) { object[] attributes = prop.GetCustomAttributes(typeof(MyAttribute), true); if (attributes.Length == 1) { //Property with my custom attribute } }
Obwohl dieser Ansatz ordnungsgemäß funktioniert, weist er den Nachteil einer unnötigen Objektinstanziierung auf. Die GetCustomAttributes()-Methode gibt ein Array von Attributinstanzen zurück, was zusätzliche Speicherzuweisung und Overhead erfordert.
Um diesen Code zu optimieren, können wir die Where()-Methode und die Attribute.IsDefined()-Methode nutzen, wie gezeigt unten:
var props = t.GetProperties().Where( prop => Attribute.IsDefined(prop, typeof(MyAttribute)));
Dieses überarbeitete Code-Snippet verbessert die Effizienz erheblich, indem es Attribute.IsDefined() verwendet, um das Vorhandensein des Attributs zu überprüfen, ohne ein Attributobjekt zu instanziieren. Die Where()-Methode filtert die Sammlung von Eigenschaften und gibt nur diejenigen zurück, die das angegebene Prädikat erfüllen.
Dieser Ansatz optimiert nicht nur den Code, sondern minimiert auch den Speicherverbrauch, indem unnötige Objekterstellung vermieden wird. Es bietet eine effizientere und elegantere Lösung zum Abrufen von Eigenschaften, die mit benutzerdefinierten Attributen gekennzeichnet sind.
Das obige ist der detaillierte Inhalt vonWie kann ich Eigenschaften mit benutzerdefinierten Attributen in .NET effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!