C # So können Sie Eigenschaften für eine Klasse mithilfe von benutzerdefinierten Eigenschaftenattributen sortieren

8

Ich habe ein benutzerdefiniertes Attribut, das ich auf Eigenschaften einer Klasse anwende. Dieses Attribut wird zum Exportieren der Eigenschaften der Klasse in eine flache Datei verwendet.

Eine der Eigenschaften des Attributs ist FieldOrder. Ich muss sicherstellen, dass die Reihenfolge, in der ich die Eigenschaften der Klasse exportiert, korrekt ist. Außerdem haben nicht alle Eigenschaften der Klasse das benutzerdefinierte Attribut.

Ich habe diesen Artikel gefunden: Wie sortiere ich eine generische Liste basierend auf einem benutzerdefinierten Attribut? Diese Lösung geht davon aus, dass alle Eigenschaften das benutzerdefinierte Attribut haben, was nicht mein Fall ist. Ich habe auch auf eine elegantere Lösung gehofft.

Ihre Hilfe wird sehr geschätzt!

%Vor%

UPDATE: Ich bestelle die Eigenschaften nach ExportAttribute.FieldOrder Ascending

    
Developer22 29.07.2011, 18:01
quelle

4 Antworten

22
%Vor%

Da Sie nicht erklärt haben, wie Sie Eigenschaften ohne das bestellte Attribut haben wollten, habe ich es so gemacht, dass sie am Anfang stehen würden. Aber der Kern dieses Codes ist:

  1. Holen Sie sich die Eigenschaften
  2. Wirf sie in einen anonymen Typ, damit du sowohl auf die Eigenschaft als auch auf das Attribut zugreifen kannst.
  3. Sortierung nach FieldOrder , wobei -1 für Eigenschaften ohne das Attribut verwendet wird. (nicht sicher, was Sie hier wollten)
  4. Verwandle die Sequenz zurück in eine Sequenz von PropertyInfo
  5. Konvertiere es in ein PropertyInfo[] -Array.
Kirk Woll 29.07.2011, 18:11
quelle
0

Sie sollten in der Lage sein, die Methode GetCustomAttributes () auf jeder PropertyInfo zu verwenden, um die Datei zu filtern Eigenschaften mit den richtigen Attributen und sortieren Sie dann die verbleibenden Elemente.

    
minimalis 29.07.2011 18:07
quelle
0
%Vor%     
achitaka-san 29.07.2011 18:19
quelle
0

Sie können eine der folgenden Optionen verwenden.

Erste Option: Übergeben Sie die anonyme Funktion an OrderBy

%Vor%

Zweite Option: Erstellen Sie die Funktion zum Auswählen des Schlüssels und übergeben Sie ihn an OrderBy

%Vor%

Die Tastenauswahlfunktion ist wie folgt definiert:

%Vor%

Wenn die Eigenschaft kein ExportAttribute hat, gibt der Selektor -1 zurück. Sie können einen beliebigen anderen Standardwert auswählen.

Mit der zweiten Methode können Sie andere Arten von Selektoren für die Bestellung definieren und einfach den neuen Selektor aufrufen, den Sie definiert haben.

    
khalidcawl 05.01.2017 05:01
quelle

Tags und Links