我想創建一種通用方法,用于按任何型別的變數對任何型別的串列進行排序。
例如,我有一個學生和一個班級物體:
Order(studentList, s => s.Name, desc)
Order(classList, s => s.ClassName, desc)
我試圖為此創建一個私有方法:
private List<T> Order<T, TKey>(List<T> listToOrder, Expression<Func<T, TKey>> sortKey, bool desc)
{
return desc ? listToOrder.OrderByDescending(sortKey) : listToOrder.OrderBy(sortKey)
}
但這顯然行不通。有什么想法可以實作這一目標嗎?如果還不夠,將編輯答案。
uj5u.com熱心網友回復:
如果你的Student&Class值被收集了,你可以嘗試寫一個擴展方法
- 回傳型別可能是
IOrderedEnumerable<T>來自OrderBy&的型別OrderByDescending。 - 您可能不需要使用
Expression,只需使用委托Func<T, TKey>就足夠了
如下
public static class MyExtesion{
public static IOrderedEnumerable<T> Order<T, TKey>(this IEnumerable<T> source,Func<T, TKey> sortKey, bool desc)
{
return desc ? source.OrderByDescending(sortKey) : source.OrderBy(sortKey);
}
}
uj5u.com熱心網友回復:
如果我的理解是正確的,試試這個:
public static List<T> Order<T>(List<T> listToOrder, Func<T, int> sortFunc, bool desc)
{
return desc ?
listToOrder.OrderByDescending(x => sortFunc(x)).ToList() : listToOrder.OrderBy(x => sortFunc(x)).ToList();
}
以下是測驗代碼:
var arr1 = new int[] {1,-1,2,-2,0,3,-3};
var result = LogHelper.Order(arr1.ToList(),x=>x*x,false);
只需記錄它們。

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/454033.html
上一篇:C#Automapper“不支持的映射”與LinQ查詢的List<dynamic>結果
下一篇:LINQ查詢未選擇檔案
