您现在的位置:首页>>

C# IList对象排序方法

类别: C#/ASP.NET 作者: Sun Kid 发表日期: 2013-01-14 17:26 流量: 4175
标签: C#
摘要: IList对象排序方法
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;
using System.Reflection;

////// IList排序类
//////public class IListSort{
private string _propertyName;
private bool _sortBy = true;
private IList_list;

////// 构造函数
//////排序的Ilist///排序字段属性名///true升序 false 降序 不指定则为truepublic IListSort(IListlist, string propertyName, bool sortBy)
{
_list = list;
_propertyName = propertyName;
_sortBy = sortBy;
}
////// 构造函数
//////排序的Ilist///排序字段属性名///true升序 false 降序 不指定则为truepublic IListSort(IListlist, string propertyName)
{
_list = list;
_propertyName = propertyName;
_sortBy = true;
}

////// IList
///public IListList
{
get { return _list; }
set { _list = value; }
}

////// 排序字段属性名
///public string PropertyName
{
get { return _propertyName; }
set { _propertyName = value; }
}

////// true升序 false 降序
///public bool SortBy
{
get { return _sortBy; }
set { _sortBy = value;}
}

////// 排序,插入排序方法
//////public IListSort()
{
if (_list.Count == 0) return _list;
for (int i = 1; i < _list.Count; i++) {
T t = _list[i];
int j = i;
while ((j > 0) && Compare(_list[j - 1], t) < 0) {
_list[j] = _list[j - 1];
--j;
}
_list[j] = t;
}
return _list;
}

////// 比较大小 返回值 小于零则X小于Y,等于零则X等于Y,大于零则X大于Y
////////////private int Compare(T x, T y)
{
if (string.IsNullOrEmpty(_propertyName)) throw new ArgumentNullException("没有指字对象的排序字段属性名!");
PropertyInfo property = typeof( T ).GetProperty(_propertyName);
if (property == null) throw new ArgumentNullException("在对象中没有找到指定属性!");

switch (property.PropertyType.ToString()) { 
case "System.Int32" :
int int1 = 0;
int int2 = 0;
if (property.GetValue(x, null) != null) {
int1 = Convert.ToInt32(property.GetValue(x, null));
}
if (property.GetValue(y, null) != null) {
int2 = Convert.ToInt32(property.GetValue(y, null));
}
if (_sortBy) {
return int2.CompareTo(int1);
}
else {
return int1.CompareTo(int2);
}
break;
case "System.Double":
double double1 = 0;
double double2 = 0;
if (property.GetValue(x, null) != null) {
double1 = Convert.ToDouble(property.GetValue(x, null));
}
if (property.GetValue(y, null) != null) {
double2 = Convert.ToDouble(property.GetValue(y, null));
}
if (_sortBy) {
return double2.CompareTo(double1);
}
else {
return double1.CompareTo(double2);
}
break;
case "System.String" :
string string1 = string.Empty;
string string2 = string.Empty;
if (property.GetValue(x, null) != null) {
string1 = property.GetValue(x, null).ToString();
}
if (property.GetValue(y, null) != null) {
string2 = property.GetValue(y, null).ToString();
}
if (_sortBy) {
return string2.CompareTo(string1);
}
else {
return string1.CompareTo(string2);
}
break;
case "System.DateTime":
DateTime DateTime1 = DateTime.Now;
DateTime DateTime2 = DateTime.Now;
if (property.GetValue(x, null) != null) {
DateTime1 = Convert.ToDateTime(property.GetValue(x, null));
}
if (property.GetValue(y, null) != null) {
DateTime2 = Convert.ToDateTime(property.GetValue(y, null));
}
if (_sortBy) {
return DateTime2.CompareTo(DateTime1);
}
else {
return DateTime1.CompareTo(DateTime2);
}
break;
}
return 0;
}
}

================************************************========================

使用方法:

public partial class IListSortTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

IListlistUsers=new List();


string[] Users = new string[] {"aa","bb","cc","ff","dd" };
for (int i = 0; i < 5; i++)
{
User u = new User();
u.Id = i;
u.Name = Users[i];
listUsers.Add(u);
}

IListSortlist = new IListSort(listUsers, "Id",false);//false为降序,不传或者传true为升序

listUsers = list.Sort();

GridView1.DataSource = listUsers;
GridView1.DataBind();
}
}

public class User
{
public int Id { get; set; }

public string Name { get; set; }
}


推荐相册
  • 美丽港城-烟台
  • 烟台南山公园
  • 这个男人值得你拥有
  • 老家
  • 春节【2012】
历史统计
  • 2016年04月 ( 3 )
  • 2016年01月 ( 1 )
  • 2015年11月 ( 2 )
  • 2015年09月 ( 1 )
  • 2015年05月 ( 1 )
  • 2015年04月 ( 1 )
  • 2015年03月 ( 2 )
  • 2015年02月 ( 2 )
  • 2014年12月 ( 2 )
  • 2014年07月 ( 5 )
  • 2014年06月 ( 1 )
  • 2014年05月 ( 7 )

欢迎光临野马一号个人博客!
本站是兴趣使然,学习之用!
记录生活点滴,享受网络人生!

野马一号
Copyright © 2012-2013 All Rights Reserved 野马一号