【发布时间】:2011-07-23 22:54:07
【问题描述】:
我最近在 .NET TimeSpan 实现中遇到了一些奇怪的行为。
TimeSpan test = TimeSpan.FromMilliseconds(0.5);
double ms = test.TotalMilliseconds; // Returns 0
FromMilliseconds 采用 double 作为参数。但是,该值似乎在内部进行了四舍五入。
如果我用 5000 个滴答(0.5 毫秒)实例化一个新的 TimeSpan,则 TotalMilliseconds 的值是正确的。
查看反射器中的TimeSpan 实现会发现输入实际上被转换为长整数。
为什么微软将FromMilliseconds 方法设计为采用双精度参数而不是长参数(因为在此实现中双精度值无用)?
【问题讨论】:
-
听起来是个糟糕的设计。 @CodeNaked 的回答指出它已记录在案,但这仅意味着他们记录了不良行为。我和你在一起:这是一个错误。如果您将其写在 Connect 中,请在此处发布链接,以便人们投票。