|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace ReputationLib
{
public enum GenericSortOrder { Ascending, Descending };
public sealed class GenericComparer<T> : IComparer<T>
{
private GenericSortOrder sortingOrder;
private string[] propertyArray = null;
//------------------------------------------------------------------
public GenericSortOrder SortingOrder { get { return sortingOrder; } }
//------------------------------------------------------------------
public GenericComparer(string sortColumn, GenericSortOrder sortingOrder)
{
if (string.IsNullOrEmpty(sortColumn))
{
throw new Exception("The sortColumn parameter is null/empty");
}
this.sortingOrder = sortingOrder;
this.propertyArray = new string[1] {sortColumn};
}
//------------------------------------------------------------------
public GenericComparer(string[] properties, GenericSortOrder order)
{
if (properties == null || properties.Length < 1)
{
throw new Exception("Properties array cannot be null/empty.");
}
this.sortingOrder = order;
this.propertyArray = properties;
}
//------------------------------------------------------------------
public int Compare(T x, T y)
{
int index = 0;
int count = propertyArray.Length;
int result = 0;
PropertyInfo propertyInfo;
IComparable obj1;
IComparable obj2;
do
{
propertyInfo = typeof(T).GetProperty(propertyArray[index]);
obj1 = (IComparable)propertyInfo.GetValue(x, null);
obj2 = (IComparable)propertyInfo.GetValue(y, null);
result = obj1.CompareTo(obj2);
if (this.SortingOrder == GenericSortOrder.Descending)
{
result = -result;
}
index++;
} while (result == 0 && index < count);
return result;
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I've been paid as a programmer since 1982 with experience in Pascal, and C++ (both self-taught), and began writing Windows programs in 1991 using Visual C++ and MFC. In the 2nd half of 2007, I started writing C# Windows Forms and ASP.Net applications, and have since done WPF, Silverlight, WCF, web services, and Windows services.
My weakest point is that my moments of clarity are too brief to hold a meaningful conversation that requires more than 30 seconds to complete. Thankfully, grunts of agreement are all that is required to conduct most discussions without committing to any particular belief system.