Timespan(0,0,secs)或Timespan.FromSeconds(secs)

时间:2014-02-03 11:49:18

标签: c# timespan seconds

Timespan(0,0,secs)Timespan.FromSeconds(secs)之间的返回值是否存在差异?

在我看来,差异在于FromSeconds接受double

3 个答案:

答案 0 :(得分:9)

最终没有,在引擎盖下,TimeSpan处理蜱虫。

就个人而言,我更愿意使用TimeSpan.FromSeconds,因为它完全清楚意图是什么。

答案 1 :(得分:3)

在第二种情况下,参数为double确实是一个重要的区别:在某些情况下,它可能会导致OverflowException。引用下面的文档。

TimeSpan Constructor (Int32, Int32, Int32)

  

指定的小时,分​​钟和秒转换为刻度,该值初始化此实例。

TimeSpan.FromSeconds Method

  

value参数转换为毫秒,转换为刻度,并且该刻度数用于初始化新TimeSpan。因此,仅将值视为精确到最接近的毫秒。请注意,由于Double数据类型的精度损失,这可能会为接近但仍在MinValue或MaxValue范围内的值生成OverflowException。这是OverflowException的原因,例如,在下面尝试实例化TimeSpan对象。

// The following throws an OverflowException at runtime
TimeSpan maxSpan = TimeSpan.FromSeconds(TimeSpan.MaxValue.TotalSeconds);

答案 2 :(得分:2)

您可以轻松测试:

int secs = 10;
var ts = new TimeSpan(0, 0, secs);
var ts2 = TimeSpan.FromSeconds(secs);
if(ts == ts2)
{
    Console.WriteLine("Equal");
}
else
{
   Console.WriteLine("Not Equal");
}

输出为:Equal

即使我发现TimeSpan.FromSeconds方法比构造函数更易读,因此更不容易出错。