2010-02-23 20 views
4

我在C#中有一個類,它有各種方法。我想在這門課的所有方法中使用en-US文化。我可以爲特定課程設置文化嗎?C#爲類設置特定文化

背景:我有一個List<object>和一些object的是數字的,有些是字符串。 我希望所有使用美國文化編寫的數字,但我不知道哪些項目是數字。 object類的ToString()似乎不採取文化的論點。

+0

您可以檢查,如果對象是一個int /浮在你的循環播放並相應投射,或者在循環播放時設置全球文化。看我的編輯。 – 2010-02-23 16:09:45

回答

5

一個類是一個數據結構,而本地化的字符串格式是行爲。從代碼/編譯器的角度來看,這兩件事與彼此沒有任何關係,並且將它設置爲「每個類」是沒有意義的。這個問題屬於使用類的代碼的範圍,或者類本身的代碼。

全球文化信息設置爲每個線程(使用Thread.CurrentThread.CurrentCultureCultureInfo.CurrentCulture)。你可以做的一件事是將文件集中的每一種方法都包含在文件集/恢復中。由於線程文化適用於所有目的的全局變量,如果您的班級在其他地方召喚出來,這可能會出現問題。

最好的方法是,如果你想爲你的類指定一種文化,只需要將文化的一個實例用作類屬性,然後使用大多數字符串/數字的文化特定重載格式化功能。

class MyClass { 
    public CultureInfo Culture { get; set; } 

    public void GetSomeString() { 
     return new Int32().ToString(Culture); 
    } 
} 

編輯:以你的問題仔細看看,我想你想要做的是什麼樣的東西:

var lastCulture = Thread.CurrentThread.CurrentCulture; 
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); 
try { 
    // loop over list here 
} 
finally { 
    Thread.CurrentThread.CurrentCulture = lastCulture; 
} 
+0

@llia:看起來CultureInfo屬性CurrentCulture是隻讀的:( – Chau 2010-02-24 08:19:38

+0

這段代碼不能按給定的方式工作 – 2010-02-24 08:37:28

+0

@llia,nobugz:雖然Thread.CurrentThread.CurrentCulture可以工作,但我選擇了這個解決方案。爲你的回覆:) – Chau 2010-02-24 08:47:45

0

您可以嘗試轉換您的項目,並在生成的項目上調用ToString,specyfing localizationa(在發生並捕獲InvalidCastException時適當地),因爲它在字符串或數字中是允許的。解決方案充其量是臭,但可行。