2008-11-06 120 views
8

我經常需要轉換一個retreived值(通常是一個字符串) - 然後將其轉換爲int。但在C#(.Net)中,您必須選擇int16,int32或int64 - 當您不知道檢索的數字有多大時,您如何知道選擇哪一個?轉換爲int16,int32,int64 - 您如何知道選擇哪一個?

+0

不要忘記,如果你不需要負數,c#也有unsigned int(uint32,uint64)。 – Powerlord 2008-11-06 21:18:39

回答

20

這裏所有提到聲明Int16保存內存的人都應該得到一個downvote。

你的問題的答案是使用關鍵字「int」(或者如果你覺得它,使用「Int32」)。

這給你一個高達24億的數字範圍...此外,32位處理器將更好地處理這些整數...還有(和最重要的原因)是,如果你打算使用該int幾乎任何原因......它可能需要是一個「int」(Int32)。

在.Net框架中,99.999%的數字字段(即整數)是「ints」(Int32)。

示例:Array.Length,Process.ID,Windows.Width,Button.Height等等等等等等等等。

編輯:我意識到我的脾氣暴躁會讓我失望......但這是正確的答案。

+3

爲什麼你會downvote答案,說Int16佔用少於Int32的RAM?它通常會這樣做,如果您需要將大量整數存儲在內存中,這可能是一個重要因素。 PS:我其實很享受你的脾氣,並沒有降低你的滿意度。 :) – 2008-11-06 21:28:12

+1

最惱人的事情:Stream.Read和Stream.Write接受'int'偏移量,而Stream.Length很長時間...呃! chunking甚至沒有提供! – chakrit 2008-11-06 21:32:38

0

如果我們只是談論幾個數字,選擇最大值不會在整體RAM使用方面產生明顯的差異,並且只會起作用。如果你正在談論很多數字,你需要在它們上使用TryParse(),並找出最小的int類型,以節省RAM。

0

所有計算機都是有限的。您需要根據您認爲您的用戶要求定義上限。

如果你確實沒有上限並且想要允許'unlimited'值,那麼可以嘗試在你的項目中添加.Net Java運行時庫,這將允許你使用java.math.BigInteger類 - 幾乎無限大小的整數。

注意:.NET Java庫帶有完整的DevStudio,但我認爲它們不包含Express。

9

只是想補充一點......我記得在.NET 1.1的日子裏編譯器已經過優化,所以'int'操作實際上比字節或短操作更快。

我相信它現在仍然有效,但我現在正在進行一些測試。


編輯:我有一個驚喜的發現:在加,減法和乘法運算短(S)實際上返回INT!

3

重複嘗試TryParse()沒有意義,您已經聲明瞭一個字段。除非您創建Object類型的字段,否則您無法改變主意。不是一個好主意。

無論數據字段表示具有物理意義。這是一個年齡,大小,數量等物理量在其範圍內具有現實的限制。選擇可以存儲該範圍的int類型。不要試圖修復溢出,這將是一個錯誤。

1

與當前最流行的答案相反,較短的整數(如Int16和SByte)通常佔用的內存空間少於大整數(如Int32和Int64)。您可以通過實例化sbyte/short/int/long的大數組並使用perfmon來測量託管堆大小來輕鬆驗證此情況。確實,許多CLR風格將在對它們進行算術運算時擴大這些用於CPU特定優化的整數,但是當作爲對象的一部分進行存儲時,它們只佔用盡可能多的內存。

所以,你絕對應該考慮大小,特別是如果你將使用大整數列表(或包含整數字段的大對象列表)。您還應該考慮CLS合規性(禁止公共成員中的任何無符號整數)。

對於將字符串轉換爲整數等簡單情況,我同意Int32(C#int)通常是最有意義的,並且可能是其他程序員期望的。