Wie man Eigenschaften einer Klasse mithilfe der benutzerdefinierten Eigenschaft Attribute
Habe ich ein benutzerdefiniertes Attribut, das ich anwenden, um die Eigenschaften einer Klasse. Dieses Attribut wird verwendet für den Export die Klasse die Eigenschaften einer flachen Datei.
Einer der Attribut-Eigenschaften ist FieldOrder
. Ich brauche zu machen sicher, dass die Reihenfolge, in der ich exportieren Sie die Eigenschaften der Klasse, der richtige ist. Auch sind nicht alle Eigenschaften auf die Klasse wird das benutzerdefinierte Attribut.
Fand ich diesen Artikel: Wie Sortiere ich eine generische Liste, basierend auf einem benutzerdefinierten Attribut? Dieser Lösung übernimmt alle Eigenschaften der benutzerdefinierten-Attribut, das ist nicht mein Fall. Ich war auch der Hoffnung für die elegantere Lösung.
Ihre Hilfe ist sehr geschätzt!
public interface IFileExport{}
public class ExportAttribute: Attribute
{
public int FieldOrder { get; set; }
public int FieldLength { get; set; }
public ExportAttribute() { }
}
public class ExportClass: IFileExport
{
[ExportAttribute( FieldOrder = 2, FieldLength = 25 )]
public string LastName { get; set; }
[ExportAttribute( FieldOrder=1, FieldLength=25)]
public string FirstName { get; set; }
[ExportAttribute( FieldOrder = 3, FieldLength = 3 )]
public int Age { get; set; }
public ExportClass() { }
}
public class TestClass
{
public static List<PropertyInfo> GetPropertiesSortedByFieldOrder
(IFileExport fileExport)
{
//get all properties on the IFileExport object
PropertyInfo[] allProperties = fileExport
.GetType()
.GetProperties( BindingFlags.Instance | BindingFlags.Public );
//now I need to figure out which properties have the ExportAttribute
//and sort them by the ExportAttribute.FieldOrder
}
}
UPDATE: ich bin mit der Bestellung der Eigenschaften von ExportAttribute.FieldOrder Aufsteigend
- Nur ein Gedanke, aber vielleicht wäre es einfacher, eine einfache xml-Serialisierung, und schreiben Sie dann eine Bibliothek zum konvertieren von der einfachen flat-xml-Datei in eine flat-Datei. Es würde wiederverwendbar, und Sie könnte überspringen all das benutzerdefinierte Attribut setup-Arbeit und Reflexion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Sie nicht erklären, wie Sie wollte-Eigenschaften ohne das Attribut bestellt, ich habe es so gemacht, dass Sie am Anfang. Aber das wesentliche dieser code:
FieldOrder
mit-1
für Eigenschaften ohne das Attribut. (nicht sicher, was Sie hier wollten)PropertyInfo
PropertyInfo[]
array.Sollten Sie in der Lage sein zu verwenden, die GetCustomAttributes() Methode auf jeden PropertyInfo zu filtern, die Eigenschaften mit den korrekten Parametern, und Sortieren Sie anschließend die restlichen Elemente.
Können Sie eine der folgenden Optionen.
Erste option: pass anonymen Funktion OrderBy
Zweite option: erstellen Sie die Funktion für die Auswahl der Schlüssel und übergeben es an die OrderBy -
Den key selector-Funktion ist definiert wie hier:
Wenn die Eigenschaft nicht haben ExportAttribute, der Selektor wird -1 zurück. Sie können wählen Sie eine andere Standard-Wert.
Der zweite Ansatz ermöglicht die Definition von anderen Arten von Selektoren für die Bestellung und rufen Sie die neue Auswahl, die Sie definiert haben.