对List进行排序

本文介绍了一种在C#中对List进行排序的方法,通过泛型实现,支持按指定属性正序或倒序排列。该方法适用于需要灵活排序功能的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码如下

 

ExpandedBlockStart.gif代码
 1 /// <summary>
 2 /// 对已有List进行排序
 3 /// </summary>
 4 /// <typeparam name="T">泛型</typeparam>
 5 /// <param name="list">已有List</param>
 6 /// <param name="fieldName">要进行排序的列名</param>
 7 /// <param name="sortType">排序类型</param>
 8 /// <returns>排序后的List</returns>
 9 public static List<T> ListSort<T>(IList<T> list, string fieldName, SortDirection sortType)
10 {
11     IList<FieldInfo> fieldInfos = GetFieldInfos(typeof(T));
12     foreach (FieldInfo fiItem in fieldInfos)
13     {
14         if (fiItem.Name.ToLower() == fieldName.ToLower())
15         {
16             if (sortType == SortDirection.Ascending)
17             {
18                 // 正序时
19                   return list.OrderBy(cell => fiItem.GetValue(cell)).ToList();
20             }
21             else if (sortType == SortDirection.Descending)
22             {
23                 // 倒序时
24                   return list.OrderByDescending(cell => fiItem.GetValue(cell)).ToList();
25             }
26         }
27     }
28 
29     return null;
30 }

 

 

上面红色部分为取得泛型T的字段列表, 当然, 这里使用的是字段, 如果你喜欢属性, 换成取属性列表就OK了~

 

ExpandedBlockStart.gif代码
 1 public static IList<FieldInfo> GetFieldInfos(Type t)
 2 {
 3     IList<FieldInfo> list = new List<FieldInfo>();
 4     BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
 5     do
 6     {
 7         foreach (FieldInfo fi in t.GetFields(flags))
 8         {
 9             list.Add(fi);
10         }
11         t = t.BaseType;
12 
13     } while (t != null);
14 
15     return list;
16 }

 

 

转载于:https://www.cnblogs.com/tonykent/archive/2010/02/06/1664796.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值