![](/img/trans.png)
[英]How can I pass TimeSpan.FromSeconds to a converter via the ConverterParameter?
[英]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) :
指定的小时,分钟和秒将转换为刻度,并且该值初始化此实例。
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.