Ich habe ein bisschen eine Herausforderung. Ich muss eine Liste von Objekten sortieren, und ich muss es aus einer Zeichenfolge sortieren, die den Pfad zu der Eigenschaft in jeder Unterklasse darstellt. Ich brauche die List.Sort() und nicht OrderBy().List.Sort von Eigenschaftsname - einschließlich Unterklassen
Lest machen ein einfaches Beispiel. Ich habe eine Liste von Personen, die von zwei Unterklassen für die Identifizierung vertreten und nennen
public class NameParts
{
public String FirstName { get; set; }
public String LastName { get; set; }
}
public class Identification
{
public String NiNumber { get; set; }
public NameParts Name { get; set; }
}
public class Person
{
public String Email { get; set; }
public String Phone { get; set; }
public Int16 Age { get; set; }
public Identification Id { get; set; }
}
Jetzt muss ich die Liste nach Alter sortiert werden. Sehr einfache
public static void SortByAge(List<Person> listToSort)
{
listToSort.Sort((x, y) => x.Age.CompareTo(y.Age));
}
Und auch von NiNumber und Vorname ist es ziemlich einfach, auf diese Weise
public static void SortByNiNumber(List<Person> listToSort)
{
listToSort.Sort((x, y) => x.Id.NiNumber.CompareTo(y.Id.NiNumber));
}
public static void SortByFirstName(List<Person> listToSort)
{
listToSort.Sort((x, y) => x.Id.Name.FirstName.CompareTo(y.Id.Name.FirstName));
}
Jetzt kommt der schwierige Teil. Ich muss alle oben genannten Arten durchführen, die eine Schnur geben, die den Pfad zur Eigenschaft darstellt, um zu sortieren. Like „Id.Name.FirstName“
Also muss ich
public static void SortByAny(List<Person> listToSort, String sortBy)
{
//??????
}
, die mit
List<Person> theList = new List<Person>();
SortByAny(theList, "Age");
SortByAny(theList, "Id.NiNumber");
SortByAny(theList, "Id.Name.FirstName");
genannt werden kann, ich weiß ich für diese Reflexion verwenden müssen, und ich habe es geschafft, tun Sie es, aber ich kann nicht weiter kommen als die Eigenschaften in der Personenklasse selbst, also muss ich wahrscheinlich etwas anderes tun, und das ist, wo ich feststecke.
Hat jemand einige brillante Ideen, wie man das löst?
Dank
Sie könnten wahrscheinlich einen Teil dieser Lösung verwenden: http://stackoverflow.com/questions/4473928/c-sharp-dynamic-string-property-path –
Können Sie erklären, warum Sie das brauchen? Vielleicht gibt es eine andere Lösung für Ihr Problem –
Ich brauche es, weil ich eine einzige Sortiermethode über die Implementierung der Sortiermethode i jede von 10-100 Klassen mit Switches für alle Sortieroptionen bevorzugen würde. natürlich würde das gut funktionieren, aber gibt mir eine Menge Code zu pflegen – Beaker