ここに簡単な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
プロパティを使用しています。2番目のバージョンでは。を使用しています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秒のミリ秒部分です。2番目のものにもTotalMillisecondsを使用します。
最初の例では、TotalMillisecondsを使用し、次にMillisecondsのみを使用します。
エラーは、2番目の例では、.Milliseconds
プロパティではなくプロパティを呼び出していることです.TotalMilliseconds
。
前者はミリ秒単位で5分を返します。後者は5分のミリ秒部分を返します。これはゼロです。
キャスト対コンバートは赤いニシンです!
2行目から「合計」を省略しました。だから、これはうまくいきます。
(int)TimeSpan.FromMinutes(5).TotalMilliseconds;
それらは同じです...あなたはTotalMilliseconds対Millisecondsを使用しました。1つ目は5分間の合計ミリ秒数で、2つ目は余り、つまり時間IEを「00:05:00.000」の「000」で表示したい場合に表示される値です。
問題は変換ではなく、TotalMillisecondsとMillisecondsを比較していることです。