C#中List实现按照对象属性排序
2010-12-22 16:36
585 查看
//// <summary> /// 继承IComparer<T>接口,实现同一自定义类型 对象比较 /// </summary> /// <typeparam name="T">T为泛用类型</typeparam> public class Reverser<T> : IComparer<T> { private Type type = null; private ReverserInfo info; //// <summary> /// 构造函数 /// </summary> /// <param name="type">进行比较的类类型</param> /// <param name="name">进行比较对象的属性名称</param> /// <param name="direction">比较方向(升序/降序)</param> 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; } //// <summary> /// 构造函数 /// </summary> /// <param name="className">进行比较的类名称</param> /// <param name="name">进行比较对象的属性名称</param> /// <param name="direction">比较方向(升序/降序)</param> 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); } } //// <summary> /// 构造函数 /// </summary> /// <param name="t">进行比较的类型的实例</param> /// <param name="name">进行比较对象的属性名称</param> /// <param name="direction">比较方向(升序/降序)</param> public Reverser(T t, string name, ReverserInfo.Direction direction) { this.type = t.GetType(); this.info.name = name; this.info.direction = direction; } //实现IComparer<T>的比较方法。 int IComparer<T>.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; } } //// <summary> /// 对象比较时使用的信息类 /// </summary> public struct ReverserInfo { //// <summary> /// 比较的方向,如下: /// ASC:升序 /// DESC:降序 /// </summary> public enum Direction { ASC = 0, DESC, }; public enum Target { CUSTOMER = 0, FORM, FIELD, SERVER, }; public string name; public Direction direction; public Target target; }
相关文章推荐
- C#中List实现按照对象属性排序
- C#List<>能按照List中的对象某个属性排序
- C# List按照对象属性进行排序
- LinkedList中将对象按照某一属性排序
- LinkedList中将对象按照某一属性排序
- List<>能按照List中对象的某个属性排序吗
- java list按照元素对象的指定多个字段属性进行排序
- java list按照 对象 指定多个字段属性进行排序
- java list按照 对象 指定多个字段属性进行排序
- List集合按照对象中某个属性排序通用工具类(按对象中某属性排序)
- 按照list中对象的属性排序
- 对list集合中的对象按照字段属性排序
- List对象去重和按照某个字段排序的实现方法
- 对list集合中的对象按照对象的某一属性进行排序
- LinkedList中将对象按照某一属性排序
- C#中对List<Object>泛型集合,根据对象的某一属性进行升序排序
- java list按照元素对象的指定多个字段属性进行排序
- C#对List 的对象的属性进行排序
- LinkedList中将对象按照某一属性排序,利用 collection.sort(); 来进行调用!
- List集合对象中按照不同属性大小排序的实例