Look at this idea:
I'm not sure if it'll help or not:
using System;
using System.Collections;
namespace MyApplication.Comparers
{
internal sealed class EmployeeComparer : IComparer
{
private EmployeeSortColumns m_sortValue = EmployeeSortColumns.None ;
public enum EmployeeSortColumns
{
None = 0 , LastName = 1 , FirstName = 2 , LastNameAndFirstName = 3
}
public EmployeeComparer(EmployeeSortColumns sortValue)
{
m_sortValue = sortValue;
}
public int Compare(object x,object y)
{
switch(m_sortValue)
{
case EmployeeSortColumns.None :
return 0;
case EmployeeSortColumns.FirstName :
return ((Employee)x).FirstName .CompareTo(((Employee )y).FirstName );
//break;
case EmployeeSortColumns.LastName :
return ((Employee)x).LastName.CompareTo(((Employee )y).LastName );
case LastNameAndFirstName :
string xValue = ((Employee)x).LastName + ((Employee)x).FirstName;
string yValue = ((Employee)y).LastName + ((Employee)y).FirstName;
return xValue.CompareTo(yValue);
default:
return ((Employee)x).LastName .CompareTo(((Employee )y).LastName );
// break;
}
}
}
}
<pa***********@gmail.com> wrote in message
news:11*********************@j55g2000cwa.googlegro ups.com...
Hello,
I've to implement a IComparer in order to sort an arraylist.
I've used reflection to get the object I need to sort, at the moment
I'm using the following piece of code:
public int Compare(object x, object y)
{
int i = 0;
object c = getIvar(x, listaOrdinamento[0].ToString());
object d = getIvar(y, listaOrdinamento[0].ToString());
i = c.ToString().CompareTo(d.ToString());
return i;
}
is there better way of doing that?
Have I to check the type of c and d and do the compare based on type?
or does the .ToString() cover all the cases?
Thanks
Bests
Paolo