繁体   English   中英

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

[英]Timespan(0,0,secs) or Timespan.FromSeconds(secs)

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

在我看来,不同之处在于FromSeconds接受了一个double精度数。

最终没有,在引擎盖下, TimeSpan处理滴答声。

我个人更喜欢使用TimeSpan.FromSeconds因为它完全清楚意图是什么。

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

TimeSpan构造函数(Int32,Int32,Int32)

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

TimeSpan.FromSeconds方法

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

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

你可以轻松测试它:

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方法比构造函数更具可读性,因此更不容易出错。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM