【发布时间】:2014-04-15 16:04:37
【问题描述】:
我一直在查看一些用于 Kinect 传感器的 Microsoft 代码示例,并偶然发现了以下行。
TimeSpan zeroDuration = TimeSpan.FromSeconds(0.0);
TimeSpan timeRemaining = ...;
if (timeRemaining.CompareTo(this.zeroDuration) > 0)
{
}
我了解CompareTo() 在排序等场景中的用途,但为什么要在有条件的if() 中使用它而不是更直接的方法?
if (timeRemaining > this.zeroDuration)
{
}
PS:如果它来自任何其他来源,我会持保留态度,但考虑到代码的一般质量,假设这是有原因的
【问题讨论】:
-
我认为这只是风格上的差异,但我可能是错的。 @Amicable 主要是关于不同的平等比较,而不是
>与CompareTo。 -
对于 TimeSpan,没有区别。我的猜测是示例开发人员不知道存在重载运算符。
-
@Amicable null 出现在字符串之前,它使用 CultureInfo.CurrentCulture.CompareInfo.Compare,这意味着它将使用与文化相关的比较。这可能意味着 ß 将与德国的 SS 比较或类似 - 不适用于 TimeSpan
-
他们可能不知道 TimeSpan 重载了这些运算符。或者他们有 Java 背景。
-
比较结构类型是不确定的,你必须知道实现。 TimeSpan 实现 IComparable。存在接口以鼓励程序员根据合约编写代码。所以使用 IComparable.CompareTo() 遵循惯例。当然,您完全可以忽略它,没有人会对此皱眉。
标签: c# .net timespan compareto