提问人:Maxim Gershkovich 提问时间:4/16/2014 更新时间:4/16/2014 访问量:17646
为什么使用 TimeSpan.CompareTo() 而不是 < > 或 =
Why use TimeSpan.CompareTo() rather than < > or =
问:
我一直在浏览 Kinect 传感器的一些 Microsoft 代码示例,并偶然发现了以下行。
TimeSpan zeroDuration = TimeSpan.FromSeconds(0.0);
TimeSpan timeRemaining = ...;
if (timeRemaining.CompareTo(this.zeroDuration) > 0)
{
}
我了解在排序等场景中如何有用,但为什么要在条件而不是更直接的方法中使用它?CompareTo()
if()
if (timeRemaining > this.zeroDuration)
{
}
PS:如果它来自任何其他来源,我会持保留态度,但考虑到代码的一般质量,假设这是有原因的
答:
27赞
Habib
4/16/2014
#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
评论
4赞
BlackBear
4/16/2014
这就是我一直在寻找自己的答案的链接!+1
上一个:十亿英里的软件修补
评论
>
CompareTo