这是一段简单的 C# 代码:
Convert.ToInt32(TimeSpan.FromMinutes(5).TotalMilliseconds);
//which brings me 300000
(int)TimeSpan.FromMinutes(5).Milliseconds;
//which brings me 0
为什么(int)
与 相比,铸造结果会有所不同Convert.ToInt32()
?
两者不应该带来相同的结果吗?
这是一段简单的 C# 代码:
Convert.ToInt32(TimeSpan.FromMinutes(5).TotalMilliseconds);
//which brings me 300000
(int)TimeSpan.FromMinutes(5).Milliseconds;
//which brings me 0
为什么(int)
与 相比,铸造结果会有所不同Convert.ToInt32()
?
两者不应该带来相同的结果吗?
在第一个版本中,您正在使用该TotalMilliseconds
属性 - 在第二个版本中,您正在使用Milliseconds
.
举一个更简单的例子,没有强制转换或调用Convert.ToInt32
:
TimeSpan ts = TimeSpan.FromHours(49);
Console.WriteLine(ts.Hours); // 1 (it's two days and one hour)
Console.WriteLine(ts.TotalHours); // 49 (it's 49 hours in total)
毫秒只是 5 秒中的毫秒部分。在第二个上也使用 TotalMilliseconds。
在您的第一个示例中,您使用 TotalMilliseconds,然后只使用毫秒。
您的错误是在第二个示例中您调用的是.Milliseconds
属性,而不是.TotalMilliseconds
属性。
前者以毫秒为单位返回 5 分钟。后者返回 5 分钟的毫秒部分,即 0。
演员与皈依者是一条红鲱鱼!
您从第二行中遗漏了“总计”。所以,这行得通。
(int)TimeSpan.FromMinutes(5).TotalMilliseconds;
它们是相同的……您使用了 TotalMilliseconds 与 Milliseconds。第一个是 5 分钟内的总毫秒数,而第二个是余数,或者如果您想在 '00:05:00.000' 中显示时间 IE '000' 将显示的值
问题不在于转换,而是您正在比较 TotalMilliseconds 和 Milliseconds!