2011-12-06 29 views
0

這裏一個簡單的C#代碼片段:Casting和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()時有什麼不同?

不應該都帶來相同的結果?

+1

我認爲他們有不同的溢出和舍入行爲。但這不是你的問題在這裏負責。 – CodesInChaos

回答

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) 
+0

嘿喬恩。事實上,我正要刪除這個問題。大聲笑。這毫秒是問題! –

3

的毫秒只是在5秒毫秒的部分。第二個也使用TotalMilliseconds。

1

您的錯誤是,在第二個示例中,您正在調用.Milliseconds屬性,而不是.TotalMilliseconds屬性。

前者以毫秒爲單位返回5分鐘。後者返回5分鐘的毫秒部分,即零。

演員對轉換是一個紅鯡魚!

2

在你的第一個例子中,你使用TotalMilliseconds,然後只是毫秒。

1

您從第二行中刪除了「總計」。所以,這是有效的。

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

它們是一樣的...你已經使用TotalMilliseconds vs毫秒。第一個是5分鐘內的總毫秒數,而第二個是剩餘時間,或者如果您想要顯示'000:00:00:000'時顯示的值,則顯示的值爲:

1

問題不在於轉換,而在於比較TotalMilliseconds和Milliseconds!