ReSharper的警告我說,我需要指定一個字符串文化做一個int.ToString()爲什麼字符串轉換指定文化
例如當:
int Value = Id.ToString(); // Where Id is an int
這只是ReSharper的是迂腐,或者是否有一個原因,我需要給一個文化設置將int轉換爲字符串?
如果有理由這樣做 - 什麼是最好的使用,當我的網站用於全球?它是否應該反映服務器設置,以便內部轉換安全完成?
ReSharper的警告我說,我需要指定一個字符串文化做一個int.ToString()爲什麼字符串轉換指定文化
例如當:
int Value = Id.ToString(); // Where Id is an int
這只是ReSharper的是迂腐,或者是否有一個原因,我需要給一個文化設置將int轉換爲字符串?
如果有理由這樣做 - 什麼是最好的使用,當我的網站用於全球?它是否應該反映服務器設置,以便內部轉換安全完成?
因爲,例如,英語文化使用'。'作爲一個小數點,法國文化使用','而相反則分隔數千。指定一種文化可以消除這種不明確性,以便代碼在針對不同語言配置的Windows操作系統上以相同的方式執行,特別是在解析值被提交到持久性存儲時。
原因是數字的字符串表示形式因國而異。
有些使用'。'作爲千位分隔符,有些使用',',有些根本不使用任何符號。
不帶參數的ToString重載使用當前文化,因此您的輸出將根據計算機的設置而變化。
這就是說,我的經驗法則是:
希望它有幫助
但是,.NET不是基於當前的線程文化信息?那麼它會爲正在使用它的用戶正確串連它?我的觀點是,用戶希望在他們的文化中看到它,而不是在他們不會理解的其他文化中,那麼爲什麼Resharper會提出這樣的建議? –
它的確如此,但是ReSharper(以及它所基於的FXCop)指出這是「你真的想要做這件事」這種事情。如果你確實需要這種行爲,最好是明確的使用CultureInfo.CurrentCulture。否則使用CultureInfo.InvariantCulture –
啊,完美!我忘記了小數。在我的情況下,我正在使用一個SQL標識列INT,我相信它將始終是一個整數,並將其轉換爲用於UI下拉框的值的字符串。你的答案解釋了這將是有用的。然後我猜測,只要我使用「CultureInfo.InvariantCulture」,都會是統一的? – Craig