web-dev-qa-db-ja.com

<>または=ではなく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:それが他のソースからのものである場合、私はそれを一粒の塩と一緒に取りますが、コードの一般的な品質を考えると、理由があると仮定します

23

どちらも内部的に同じことをします。 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

19
Habib