lunedì 23 maggio 2011

List T Sort ( )

Quando si utilizzano le liste generiche come dataSource per le dataGrid ci si ritrovi a dover implementare il sort.
Questo avviene perchè nelle list T non è implementato il comparatore di default dato che la list è basata su tipo T generico

public class StringField<E> : IComparer<E>
{
private string FieldName = "";
private SortDirection SortDir = new SortDirection();


public int Compare(E x, E y)
{
int returnValue = 1;
if ((x != null) && (y != null))
{
Type _e = typeof(E);

PropertyInfo _p = _e.GetProperty(FieldName);

string sXvalue = (string)_p.GetValue(x,null);
string sYvalue = (string)_p.GetValue(y, null);

if (SortDir == SortDirection.Ascending)
{
returnValue = sXvalue.CompareTo(sYvalue);
}
else
{
returnValue = sYvalue.CompareTo(sXvalue);
}
}
return returnValue;
}

public StringField(string fName, SortDirection sDirection )
{
FieldName = fName;
SortDir = sDirection;
}
}
Che cosa potevo inventarmi se non un Generco Comparer ?? null'altro. Ahi me avrei voluto provare a creare qualcosa di molto più efficace ma questo probabilmente avrebbe rallentato
il mio processo, nel senso che avrei potuto implicitamente richiedere come parametro il tipo
su cui eseguire il confronto, e quindi tipizzarmi il campo su cui eseguire i confronti.

Bhe ho preferito questa via, in modo da dover implementare dei comparatori specifici
per interi stringhe e date...




Nessun commento: