为什么使用TimeSpan.CompareTo()而不是< >或=

时间:2014-04-15 16:04:38

标签: c# .net timespan compareto

我一直在浏览Kinect传感器的一些Microsoft代码示例,并且偶然发现了以下行。

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

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

我理解CompareTo()在排序等方面有用,但为什么会在条件if()中使用而不是更直接的方法?

if (timeRemaining > this.zeroDuration)
{
}

PS:如果是来自任何其他来源,我会认真考虑,但考虑到代码的一般质量,假设有一个原因

1 个答案:

答案 0 :(得分:17)

内部都做同样的事情。比较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;
        }

源代码来自:Reference Source .NET Framework 4.5.1 - Microsoft