Timespan(0,0,secs)
和Timespan.FromSeconds(secs)
之间的返回值是否存在差异?
在我看来,差异在于FromSeconds接受double
。
答案 0 :(得分:9)
最终没有,在引擎盖下,TimeSpan
处理蜱虫。
就个人而言,我更愿意使用TimeSpan.FromSeconds
,因为它完全清楚意图是什么。
答案 1 :(得分:3)
在第二种情况下,参数为double
确实是一个重要的区别:在某些情况下,它可能会导致OverflowException
。引用下面的文档。
TimeSpan Constructor (Int32, Int32, Int32):
指定的小时,分钟和秒转换为刻度,该值初始化此实例。
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
方法比构造函数更易读,因此更不容易出错。