十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
今天就跟大家聊聊有关C#中有哪些List排序方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
10年积累的网站建设、网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有疏附免费网站建设让你可以放心的选择与我们合作。
ArrayList arrayList;
最重要的是:继承IComparer
代码如下:
/**/////// 继承IComparer ///接口,实现同一自定义类型 对象比较 /// T为泛用类型 public class Reverser: IComparer ...{ private Type type = null; private ReverserInfo info; /**//// /// 构造函数 /// /// 进行比较的类类型 /// 进行比较对象的属性名称 /// 比较方向(升序/降序) public Reverser(Type type, string name, ReverserInfo.Direction direction) ...{ this.type = type; this.info.name = name; if (direction != ReverserInfo.Direction.ASC) this.info.direction = direction; } /**/////// 构造函数 /// /// 进行比较的类名称 /// 进行比较对象的属性名称 /// 比较方向(升序/降序) public Reverser(string className, string name, ReverserInfo.Direction direction) ...{ try ...{ this.type = Type.GetType(className, true); this.info.name = name; this.info.direction = direction; } catch (Exception e)...{ throw new Exception(e.Message); } } /**/////// 构造函数 /// /// 进行比较的类型的实例 /// 进行比较对象的属性名称 /// 比较方向(升序/降序) public Reverser(T t, string name, ReverserInfo.Direction direction) ...{ this.type = t.GetType(); this.info.name = name; this.info.direction = direction; } //必须!实现IComparer的比较方法。 int IComparer .Compare(T t1, T t2) ...{ object x = this.type.InvokeMember(this.info.name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, t1, null); object y = this.type.InvokeMember(this.info.name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, t2, null); if (this.info.direction != ReverserInfo.Direction.ASC) Swap(ref x, ref y); return (new CaseInsensitiveComparer()).Compare(x, y); } //交换操作数 private void Swap(ref object x, ref object y) ...{ object temp = null; temp = x; x = y; y = temp; } } /**//// /// 对象比较时使用的信息类 /// public struct ReverserInfo ...{ /**/////// 比较的方向,如下: /// ASC:升序 /// DESC:降序 /// public enum Direction ...{ ASC = 0, DESC, }; public enum Target ...{ CUSTOMER = 0, FORM, FIELD, SERVER, }; public string name; public Direction direction; public Target target; }
上面主要是运用了C#的反射 和 Framework中的排序算法。
像上面那样实现接口后,就可以使用List
测试代码如下:
using System; using System.Collections.Generic; using System.Collections; using System.Reflection; using System.Text; namespace List_T_SortTest_u_2 ...{
测试Reverser代码段#region 测试Reverser
/**/////// 实体类User,测试用 /// public class User ...{ protected string _name; protected int _age; protected string _address; public User(string name, int age, string address) ...{ this._name = name; this._age = age; this._address = address; } public string Name ...{ get ...{ return _name; } set ...{ _name = value; } } public int Age ...{ get ...{ return _age; } set ...{ _age = value; } } public string Address ...{ get ...{ return _address; } set ...{ _address = value; } } } /**/////// 主程序类(启动类),测试用 /// class Program ...{ static void Main(string[] args) ...{ ListuserList = new List (); User user; user = new User("Wang", 21, "ShenYang"); userList.Add(user); user = new User("Yan", 27, "JinZhou"); userList.Add(user); user = new User("Liu", 26, "BeiJing"); userList.Add(user); user = new User("Zhao", 30, "ChaoYang"); userList.Add(user); user = new User("Yang", 27, "FuXin"); userList.Add(user); //for (int i = 0; i < ar.Count; i++ ) // ; Console.Write("Name "); Console.Write("Age "); Console.Write("Address " + " " + " "); Console.WriteLine("-----------------------"); foreach (User u in userList) ...{ Console.Write(u.Name + " "); Console.Write(u.Age + " "); Console.Write(u.Address + " " + " "); } Console.WriteLine(); Reverser reverser = new Reverser (user.GetType(), "Name", ReverserInfo.Direction.DESC); userList.Sort(reverser); Console.WriteLine(); foreach (User u in userList) ...{ Console.Write(u.Name + " "); Console.Write(u.Age + " "); Console.Write(u.Address + " " + " "); } Console.WriteLine(); reverser = new Reverser (user.GetType(), "Age", ReverserInfo.Direction.ASC); userList.Sort(reverser); Console.WriteLine(); foreach (User u in userList) ...{ Console.Write(u.Name + " "); Console.Write(u.Age + " "); Console.Write(u.Address + " " + " "); } Console.Read(); } } #endregion }
看完上述内容,你们对C#中有哪些List排序方法有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。