Considere el siguiente código:¿Por qué se implementa CompareTo en corto de esta manera?
namespace ConsoleApplication1 {
class Program
{
static void Main(string[] args)
{
Console.WriteLine(100.CompareTo(200)); // prints -1
Console.WriteLine(((decimal)100).CompareTo((decimal)200)); // prints -1
Console.WriteLine(((short)100).CompareTo((short)200)); // prints -100
Console.WriteLine(((float)100).CompareTo((float)200)); // prints -1
Console.ReadKey();
}
}
}
Mi pregunta es, ¿hay razones específicas del CompareTo método de Int16 devuelve valores distintos de -1, 0 y 1?
ILSpy muestra que se lleva a cabo de esta manera
public int CompareTo(short value)
{
return (int)(this - value);
}
mientras que el método se implented en Int32 esta manera
public int CompareTo(int value)
{
if (this < value)
{
return -1;
}
if (this > value)
{
return 1;
}
return 0;
}
Gracias por su respuesta. No pensé en el problema del desbordamiento. Desafortunadamente, tengo que mantener una aplicación heredada que contiene una gran cantidad de código suponiendo que CompareTo devuelve siempre -1, 0 o 1 ... – sloth
@dkson: sugiero que corrija el código heredado. Ese tipo de suposición simplemente seguirá mordiéndote hasta que finalmente lo arregles. Mejor hacerlo más pronto que tarde, y educar a los desarrolladores originales, si todavía están por ahí ... –