Подтвердить что ты не робот

Зачем использовать TimeSpan.CompareTo(), а не <> или =

Я просматриваю некоторые образцы кода Microsoft для датчика Kinect и наткнулся на следующую строку.

TimeSpan zeroDuration = TimeSpan.FromSeconds(0.0);
TimeSpan timeRemaining = ...;

if (timeRemaining.CompareTo(this.zeroDuration) > 0)
{
}

Я понимаю, как CompareTo() полезен в сценариях, таких как сортировка, но почему он будет использоваться в условном if() вместо более прямого подхода?

if (timeRemaining > this.zeroDuration)
{
}

PS: Я бы взял его с солью, если бы он был из любого другого источника, но с учетом общего качества кода предполагал, что есть причина

4b9b3361

Ответ 1

Оба внутри делают то же самое. Сравните Ticks и верните результат.

public int CompareTo(TimeSpan value) {
    long t = value._ticks;
    if (_ticks > t) return 1;
    if (_ticks < t) return -1;
    return 0;
}

 public static bool operator <(TimeSpan t1, TimeSpan t2) {
            return t1._ticks < t2._ticks;
}

Единственной причиной может быть другая перегрузка для CompareTo, которая получает параметр типа object для null и затем сравнивает. Реализован как:

public int CompareTo(Object value) {
            if (value == null) return 1;
            if (!(value is TimeSpan))
                throw new ArgumentException(Environment.GetResourceString("Arg_MustBeTimeSpan"));
            long t = ((TimeSpan)value)._ticks;
            if (_ticks > t) return 1;
            if (_ticks < t) return -1;
            return 0;
        }

Исходный код: Источник ссылки .NET Framework 4.5.1 - Microsoft