Estoy tratando de escribir un comparador genérico de objetos para ordenar, pero me he dado cuenta de que no maneja la instancia donde uno de los valores que está comparando es nulo. Cuando un objeto es nulo, quiero que lo trate igual que la cadena vacía. Intenté establecer los valores nulos en String.Empty, pero luego aparece el error "El objeto debe ser del tipo String" al llamar a CompareTo() en él.¿Cómo puedo hacer que mi comparer genérico (IComparer) maneje nulos?
public int Compare(T x, T y)
{
PropertyInfo propertyInfo = typeof(T).GetProperty(sortExpression);
IComparable obj1 = (IComparable)propertyInfo.GetValue(x, null);
IComparable obj2 = (IComparable)propertyInfo.GetValue(y, null);
if (obj1 == null) obj1 = String.Empty; // This doesn't work!
if (obj2 == null) obj2 = String.Empty; // This doesn't work!
if (SortDirection == SortDirection.Ascending)
return obj1.CompareTo(obj2);
else
return obj2.CompareTo(obj1);
}
estoy bastante atascado con esto ahora! Cualquier ayuda sería apreciada.
Gracias Anthony, eso funciona un placer! Realmente no sé por qué nunca parece detectar la solución simple ... – NickG