我有一點挑戰。我需要對對象列表進行排序,並且我需要從代表任何子類中屬性路徑的字符串對它進行排序。 我需要使用List.Sort()而不是OrderBy()。List.Sort屬性名稱 - 包括子類
不要舉個簡單的例子。我有一個由兩個子類別代表的名稱和名稱
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; }
}
現在我需要按年齡對列表進行排序。很簡單
public static void SortByAge(List<Person> listToSort)
{
listToSort.Sort((x, y) => x.Age.CompareTo(y.Age));
}
即使通過NiNumber和名字是相當簡單的這樣
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));
}
現在到了棘手的部分。我需要執行上述所有類型,並給出一個字符串來表示要排序的屬性的路徑。 像「Id.Name.FirstName」
所以我需要
public static void SortByAny(List<Person> listToSort, String sortBy)
{
//??????
}
,可以用
List<Person> theList = new List<Person>();
SortByAny(theList, "Age");
SortByAny(theList, "Id.NiNumber");
SortByAny(theList, "Id.Name.FirstName");
我知道我需要使用反射這個調用,我已成功地這樣做,但我不能超過人類本身的屬性,所以我可能需要做一些其他的事情,這是我卡住的地方。
有沒有人有一些關於如何解決這個問題的精彩想法?
感謝
你可以使用這個解決方案的一部分:http://stackoverflow.com/questions/4473928/c-sharp-dynamic-string-property-path –
你能解釋爲什麼你需要這個?也許有你的問題的另一種解決方案 –
我需要它,因爲我寧願單一排序方法實施排序方法我每個10-100類交換所有排序選項。 當然,這將工作得很好,但給了我很多代碼來維護 – Beaker