【问题标题】:Casting and Convert.ToInt32() behave different in C#?Casting 和 Convert.ToInt32() 在 C# 中的行为不同?
【发布时间】:2011-12-06 22:35:45
【问题描述】:

这里有一段简单的 C# 代码:

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

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

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

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

【问题讨论】:

  • 我认为它们有不同的溢出和舍入行为。但这不对您的问题负责。

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


【解决方案1】:

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

【讨论】:

  • 嘿乔恩。事实上,我正要删除这个问题。哈哈。毫秒就是问题所在!
【解决方案2】:

毫秒只是 5 秒中的毫秒部分。对第二个也使用 TotalMilliseconds。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      演员与转换是一个红鲱鱼!

      【讨论】:

        【解决方案5】:

        您在第二行中遗漏了“总计”。所以,这行得通。

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 2013-08-23
              • 1970-01-01
              • 2010-09-08
              • 2017-06-09
              • 1970-01-01
              • 1970-01-01
              • 2013-06-07
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多