/************************************
* 功能:进行数据排序
* 作者:王余
* 完成时间:2011-4-21
* 版本:v1.0
************************************/
public class CompareSort : IComparer
{
private string _proName;
private object obj;
private bool isAsc = true;
/// <summary>
/// 构造方法
/// </summary>
/// <param name="proname">要根据某个字段排序的属性名</param>
/// <param name="obj">要排序的类</param>
/// <param name="isAsc">如果为真,则表示升序,如果为假,则表示降序,默认为真</param>
public CompareSort(string proname,object obj,bool isAsc)
{
this._proName = proname;
this.obj = obj;
this.isAsc = isAsc;
}
/// <summary>
/// 构造方法
/// </summary>
/// <param name="proname">要根据某个字段排序的属性名</param>
/// <param name="obj">要排序的类</param>
public CompareSort(string proname, object obj)
{
this._proName = proname;
this.obj = obj;
}
#region IComparer 成员
public int Compare(object x, object y)
{
try
{
Type type = obj.GetType();
PropertyInfo info = type.GetProperty(_proName);
object xvalue;
object yvalue;
try
{
xvalue = info.GetValue(x, null);
yvalue = info.GetValue(y, null);
}catch(NullReferenceException)
{
throw new NullReferenceException();
}
//如果为假,则降序
if (!isAsc)
{
object temp = new object();
temp = xvalue;
xvalue = yvalue;
yvalue = temp;
}
/*
* 判断数据类型进行比较
*/
if (xvalue is string)
{
return (xvalue as string).CompareTo(yvalue as string);
}
if (xvalue is int)
{
return ((int)xvalue).CompareTo((int)yvalue);
}
if (xvalue is float)
{
return ((float)xvalue).CompareTo((float)yvalue);
}
if (xvalue is double)
{
return ((double)xvalue).CompareTo((double)yvalue);
}
}
catch (NotImplementedException)
{
throw new NotImplementedException();
}
return 0;
}
#endregion
}