3

因此,我有幾個用於本地化的資源文件。他們是可以格式化的字符串。FxCop CA1305:CurrentCulture與CurrentUICulture

例如:

MyResource.resx 
Title: "MyApp - Ver: {0}" 

我那麼做,像這樣返回它:

public String Title 
{ 
    get { return String.Format(CultureInfo.CurrentUICulture, MyResources.Title, 1); } 
} 

我理解的CurrentUICulture和的CurrentCulture之間的差異,但FxCop的告訴我使用的CurrentCulture呢?

回答

6

在某種程度上FxCop是正確的:在這種情況下,您不應該使用CurrentUICulture。正如其他人已經說過的,CurrentCulture是用於區域識別格式的,而CurrentUICulture用於從資源中讀取可翻譯的字符串。
你在這裏所做的是格式化數字,因此FxCop抱怨你使用了不正確的CultureInfo。不幸的是,FxCop沒有告訴你的是,你實際上應該使用CultureInfo.InvariantCulture。爲什麼?因爲版本號是不依賴於Locale的。你總是會看到類似1.9而不是像1,9的東西。因此InvariantCulture是要走的路。
微軟甚至提供了專門的類來存儲版本信息 - 奇怪的是它的名字是Version(AFAIR它在System命名空間)。當你做ToString()時,這將始終呈現你之前提到的版本號。它的構造函數在實例化時也期望Locale-invariant版本字符串。

5

String.Format通常會用於數字或日期格式,它基於CurrentCulture而不是CurrentUICulture

3

另一件事是,CurrentUICulture可以是一箇中立的文化,而CurrentCulture總是一種特定的文化。

XXXFormatInfo類型不適用於中性文化,並且會引起NotSupportedException異常。

相關問題