2012-03-23 63 views
1

當時正在玩TimeSpan類的一點點,我開始想知道爲什麼timepan類的屬性都是int32s?Timespan.Hour,從-23到23的範圍返回它爲什麼是int32?

我明白了爲什麼當你創建你的時間跨度構造函數接受一個I​​nt32,但如果你看看MSDN文檔它規定:

「目前的時間跨度結構的小時部分返回 值範圍從-23到23「。

以及該屬性看起來像這樣

公衆詮釋小時{獲得; }

我的第一個本能的想法是,它與TimeSpan.TotalHours共享某種數據,但這是雙重的。

這是一個int32,而不是我已經完全忽略的int8的原因嗎?或者在結構中有一些隱藏的功能,我錯過了?

+0

可能是因爲'Int32'高度優化了編譯器。 – 2012-03-23 10:48:04

回答

2

處理32位整數在性能方面與處理更小的精度(如Int16或Byte)沒有什麼不同。

因此,一致性在這裏比在這裏和那裏保存幾個字節更重要。

可能出現的另一個問題是,當您嘗試對較小的整數(加法,乘法)運算操作時,您有可能會發生溢出,或者必須將其轉換爲較大的整數。

1

INT8(又名SByte):

此API不符合CLS。符合CLS的替代方案是Int16。

如果他們決定在框架內的核心類庫中公開非CLS兼容類型,那將是不常見的。所以int8肯定是錯誤的選擇。然後,正如@Aliostad所說,事實是在實際操作中,較短的整數值往往被視爲完整的32位值 - 所以使用較小類型的性能沒有任何好處。

相關問題