hallo,
ich verzweifel hier langsam, ich weiß das ich hier etwas schweres und verrücktes versuche...ich möchte eine methode, die mir meine liste sortiert und ich muss nur den eigenschaftsnamen angeben, klar könnte ich das auch mit NUR der linq schreibweise lösen allerdings möchte ich es auf diesem weg erreichen, da ich in anderen Projekten auch immer wieder andere Klassen und Objekte habe (Später soll das noch erweitert werden, aber es scheitert aktuell hier)..
public void SortListByProperty(IEnumerable list, string propertyname)
{
// Exception Handling
/*******************************************************************/
Exception exProperty = new Exception("Falschen Eigenschaftswert angegebenen");
// Eigenschaften zum Sortieren erhalten
/*******************************************************************/
List<Object> listObjects = new List<Object>();
foreach (var item in list)
{
listObjects.Add(item);
}
// Klasse erhalten
Type type = listObjects[0].GetType();
// Eigenschaft, nach der sortiert wird
PropertyInfo property = type.GetProperty(propertyname);
if (property == null) { throw exProperty; } // Fehler verhindern (Eigenschaft nicht gefunden)
// Sortieren
/*******************************************************************/
list = from item in listObjects orderby property ascending select item;
}
CListSorter sorter = new CListSorter();
sorter.SortListByProperty(ListeSpieler, "Nr");
das erste problem war immer wie bekomm ich das IEnumberable in meiner LINQ-Schreibform rein, habe mich jetzt für List<Objects> entschieden,
also Fehlermeldungen gibt es nicht, nur er sortiert mir die Liste nicht, sie bleibt wie vorher
Ist weder verrückt noch schwer 🙂 probiers mal so:
public static IEnumerable<T> SortListByProperty<T>(IEnumerable<T> list, string propertyname) {
PropertyInfo Prop = typeof(T).GetProperty(propertyname);
// sort
IEnumerable<T> result = from item in list orderby Prop.GetValue(item, null) ascending select item;
//oder
//list.OrderBy(TObj => Prop.GetValue(TObj, null));
return result;
}
Du hast bei dir die propertyinfo zum sortieren verwendet und nicht den wert der property.
viel spaß
boah echt super!!! hammer!!!
danke schön!
also die syntax gefält mir sehr gut!
jetzt habe ich nur noch eine frage: und zwar wie kann ich das
ascending
und descanding ersetzten ?? als variable
mit SortOrder gehts schon mal nicht
Da 'ascending' und 'descending' Keywords sind, einfach eine if-Abfrage einbauen:
if(sortorder == SortOrder.Ascending)
result = from item in list orderby Prop.GetValue(item, null) ascending select item;
else
result = from item in list orderby Prop.GetValue(item, null) descending select item;
ja ok, so meinte ich es zwar nicht (und so hab ichs jetzt auch aktuell im programm) aber trotzdem danke 😉
meinte eher ob es eine schnittstelle gibt oder eine enum die ich als variable dafür benutzen kann.