私はKinectセンサーのコードのMicrosoftサンプルをいくつか調べてきましたが、次の行に出くわしました。
_TimeSpan zeroDuration = TimeSpan.FromSeconds(0.0);
TimeSpan timeRemaining = ...;
if (timeRemaining.CompareTo(this.zeroDuration) > 0)
{
}
_
ソートなどのシナリオでCompareTo()
がどのように役立つかは理解していますが、より直接的なアプローチではなく、条件付きのif()
で使用されるのはなぜですか?
_if (timeRemaining > this.zeroDuration)
{
}
_
PS:それが他のソースからのものである場合、私はそれを一粒の塩と一緒に取りますが、コードの一般的な品質を考えると、理由があると仮定します
どちらも内部的に同じことをします。 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;
}