Почему CompareTo на short реализовано таким образом?

Рассмотрим следующий код:

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();
        }
    } 
}

Мой вопрос: есть ли какие-то конкретные причины, по которым метод CompareTo в Int16 возвращает значения, отличные от -1, 0 и 1?

ILSpy показывает это реализовано таким образом

public int CompareTo(short value)
{
    return (int)(this - value);
}

, тогда как метод реализуется в Int32 таким образом

public int CompareTo(int value)
{
    if (this < value)
    {
        return -1;
    }
    if (this > value)
    {
        return 1;
    }
    return 0;
}
5
задан sloth 5 July 2011 в 08:41
поделиться