2014-04-05 67 views
10

ReSharper的警告我說,我需要指定一個字符串文化做一個int.ToString()爲什麼字符串轉換指定文化

例如當:

int Value = Id.ToString(); // Where Id is an int 

這只是ReSharper的是迂腐,或者是否有一個原因,我需要給一個文化設置將int轉換爲字符串?

如果有理由這樣做 - 什麼是最好的使用,當我的網站用於全球?它是否應該反映服務器設置,以便內部轉換安全完成?

回答

13

因爲,例如,英語文化使用'。'作爲一個小數點,法國文化使用','而相反則分隔數千。指定一種文化可以消除這種不明確性,以便代碼在針對不同語言配置的Windows操作系統上以相同的方式執行,特別是在解析值被提交到持久性存儲時。

+1

但是,.NET不是基於當前的線程文化信息?那麼它會爲正在使用它的用戶正確串連它?我的觀點是,用戶希望在他們的文化中看到它,而不是在他們不會理解的其他文化中,那麼爲什麼Resharper會提出這樣的建議? –

+1

它的確如此,但是ReSharper(以及它所基於的FXCop)指出這是「你真的想要做這件事」這種事情。如果你確實需要這種行爲,最好是明確的使用CultureInfo.CurrentCulture。否則使用CultureInfo.InvariantCulture –

+0

啊,完美!我忘記了小數。在我的情況下,我正在使用一個SQL標識列INT,我相信它將始終是一個整數,並將其轉換爲用於UI下拉框的值的字符串。你的答案解釋了這將是有用的。然後我猜測,只要我使用「CultureInfo.InvariantCulture」,都會是統一的? – Craig

4

原因是數字的字符串表示形式因國而異。

有些使用'。'作爲千位分隔符,有些使用',',有些根本不使用任何符號。

不帶參數的ToString重載使用當前文化,因此您的輸出將根據計算機的設置而變化。

這就是說,我的經驗法則是:

  • 每一個內部形式必須InvariantCulture的(從未中繼服務器設置的!)
  • 一切的呈現必須把最終用戶的區域設置

希望它有幫助

相關問題