Casting和Convert.ToInt32()在C#中表现不同?

时间:2011-12-06 22:35:46

标签: c# casting type-conversion numeric-conversion

这是一段简单的C#代码:

Convert.ToInt32(TimeSpan.FromMinutes(5).TotalMilliseconds);
//which brings me 300000

(int)TimeSpan.FromMinutes(5).Milliseconds;
//which brings me 0

(int)相比,为什么投射Convert.ToInt32()结果会有所不同?

两者都不应该带来相同的结果吗?

7 个答案:

答案 0 :(得分:8)

在第一个版本中,您使用的是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)

答案 1 :(得分:3)

毫秒只是5秒的毫秒PORTION。在第二个上也使用TotalMilliseconds。

答案 2 :(得分:2)

在第一个示例中,您使用TotalMilliseconds,然后使用Milliseconds。

答案 3 :(得分:1)

您的错误是在第二个示例中,您正在调用.Milliseconds属性,而不是.TotalMilliseconds属性。

前者以毫秒为单位返回5分钟。后者返回5分钟的毫秒部分,即零。

演员与皈依者是一个红鲱鱼!

答案 4 :(得分:1)

你从第二行遗漏了“总计”。所以,这很有效。

(int)TimeSpan.FromMinutes(5).TotalMilliseconds;

答案 5 :(得分:1)

它们是相同的......你使用的是TotalMilliseconds和Milliseconds。第一个是5分钟内的总毫秒数,而第二个是剩余部分,或者如果你想在'00:05:00.000'中显示时间IE'000'将显示的值

答案 6 :(得分:1)

问题不在于转换,而在于您要比较TotalMilliseconds和Milliseconds!