天天看点

IList排序

其实重点在于实现 IComparer 接口,实现按照自已的来排序

class Entity

IList排序
IList排序
IList排序

{

IList排序

        public Entity()

IList排序
IList排序
IList排序

{}

IList排序

        private int id;

IList排序

        public int Id

IList排序
IList排序
IList排序
IList排序

            get

IList排序
IList排序
IList排序
IList排序

                return id;

IList排序

            }

IList排序

            set

IList排序
IList排序
IList排序
IList排序

                id = value;

IList排序
IList排序

        }

IList排序

        private string name;

IList排序

        public string Name

IList排序
IList排序
IList排序
IList排序
IList排序
IList排序
IList排序
IList排序

                return name;

IList排序
IList排序
IList排序
IList排序
IList排序
IList排序

                name = value;

IList排序
IList排序
IList排序
IList排序

        private double price;

IList排序

        public double Price

IList排序
IList排序
IList排序
IList排序
IList排序
IList排序
IList排序
IList排序

                return price;

IList排序
IList排序
IList排序
IList排序
IList排序
IList排序

                price = value;

IList排序
IList排序
IList排序

    }

IList排序
IList排序

然后写一个对象比较的类,实现IComparer<T>接口。

IList排序

    internal class ListComparer<TBaseBusinessObject> : IComparer<TBaseBusinessObject>

IList排序
IList排序
IList排序
IList排序

        private string propertyName;

IList排序
IList排序

        public ListComparer(string PropertyName)

IList排序
IList排序
IList排序
IList排序

            propertyName = PropertyName;

IList排序
IList排序
IList排序
IList排序
IList排序

        IComparer Members#region IComparer<TBaseBusinessObject> Members

IList排序
IList排序

        public int Compare(TBaseBusinessObject x, TBaseBusinessObject y)

IList排序
IList排序
IList排序
IList排序

            PropertyInfo property = typeof(TBaseBusinessObject).GetProperty(propertyName);

IList排序

            if (property.PropertyType == Type.GetType("System.Int16"))

IList排序
IList排序
IList排序
IList排序

                int xNumber = 0;

IList排序

                int yNumber = 0;

IList排序

                if (property.GetValue(x, null) != null)

IList排序
IList排序
IList排序
IList排序

                    xNumber = Convert.ToInt16(property.GetValue(x, null).ToString());

IList排序

                }

IList排序

                if (property.GetValue(y, null) != null)

IList排序
IList排序
IList排序
IList排序

                    yNumber = Convert.ToInt16(property.GetValue(y, null).ToString());

IList排序
IList排序

                return xNumber.CompareTo(yNumber);

IList排序
IList排序

            if (property.PropertyType == Type.GetType("System.Int32"))

IList排序
IList排序
IList排序
IList排序
IList排序
IList排序
IList排序
IList排序
IList排序
IList排序

                    xNumber = Convert.ToInt32(property.GetValue(x, null).ToString());

IList排序
IList排序
IList排序
IList排序
IList排序
IList排序

                    yNumber = Convert.ToInt32(property.GetValue(y, null).ToString());

IList排序
IList排序
IList排序
IList排序

            if (property.PropertyType == Type.GetType("System.Double"))

IList排序
IList排序
IList排序
IList排序

                double xNumber = 0;

IList排序

                double yNumber = 0;

IList排序
IList排序
IList排序
IList排序
IList排序

                    xNumber = Convert.ToDouble(property.GetValue(x, null).ToString());

IList排序
IList排序
IList排序
IList排序
IList排序
IList排序

                    yNumber = Convert.ToDouble(property.GetValue(y, null).ToString());

IList排序
IList排序
IList排序
IList排序

            if (property.PropertyType == Type.GetType("System.DateTime"))

IList排序
IList排序
IList排序
IList排序

                DateTime xTime = DateTime.Now;

IList排序

                DateTime yTime = DateTime.Now;

IList排序
IList排序
IList排序
IList排序
IList排序

                    xTime = Convert.ToDateTime(property.GetValue(x, null).ToString());

IList排序
IList排序
IList排序
IList排序
IList排序
IList排序

                    yTime = Convert.ToDateTime(property.GetValue(y, null).ToString());

IList排序
IList排序

                return xTime.CompareTo(yTime);

IList排序
IList排序

            if ((property.PropertyType == Type.GetType("System.String")) || (property.PropertyType == Type.GetType("System.Boolean")))

IList排序
IList排序
IList排序
IList排序

                string xText = string.Empty;

IList排序

                string yText = string.Empty;

IList排序
IList排序
IList排序
IList排序
IList排序

                    xText = property.GetValue(x, null).ToString();

IList排序
IList排序
IList排序
IList排序
IList排序
IList排序

                    yText = property.GetValue(y, null).ToString();

IList排序
IList排序

                return xText.CompareTo(yText);

IList排序
IList排序

            return 0;

IList排序
IList排序
IList排序
IList排序

        #endregion

IList排序
IList排序

然后是写了一个List继承List<T>类的集合,

IList排序

    public class BaseBusinessObjectList<TBaseBusinessObject> : List<TBaseBusinessObject>

IList排序
IList排序
IList排序
IList排序

        public void Sort(string sortfield, bool isAscending)

IList排序
IList排序
IList排序
IList排序

            //这里实例化了刚才写的IComparer类。

IList排序

            ListComparer<TBaseBusinessObject> listComparer = new ListComparer<TBaseBusinessObject>(sortfield);

IList排序

            base.Sort(listComparer);

IList排序

            if (!isAscending) base.Reverse();

IList排序
IList排序
IList排序
IList排序

于是就写完了,用的时候

IList排序

    BaseBusinessObjectList<Entity> list = new BaseBusinessObjectList<Entity>();

IList排序

    Entity obj = new Entity();

IList排序

    obj.Id = 1;

IList排序

    obj.Name = "test";

IList排序

    obj.Price = 3.23;

IList排序

    list.Add(obj);

IList排序
IList排序

    //按照Name字段向上排序。

IList排序

    list.Sort("Name",true);

IList排序

    //按照Price字段向上排序。

IList排序

    list.Sort("Price",true);

IList排序

    //按照Id字段向下排序。

IList排序

    list.Sort("Id",false);

IList排序

完了~~~

继续阅读