我在C#中有一個類,它有各種方法。我想在這門課的所有方法中使用en-US
文化。我可以爲特定課程設置文化嗎?C#爲類設置特定文化
背景:我有一個List<object>
和一些object
的是數字的,有些是字符串。 我希望所有使用美國文化編寫的數字,但我不知道哪些項目是數字。 object
類的ToString()
似乎不採取文化的論點。
我在C#中有一個類,它有各種方法。我想在這門課的所有方法中使用en-US
文化。我可以爲特定課程設置文化嗎?C#爲類設置特定文化
背景:我有一個List<object>
和一些object
的是數字的,有些是字符串。 我希望所有使用美國文化編寫的數字,但我不知道哪些項目是數字。 object
類的ToString()
似乎不採取文化的論點。
一個類是一個數據結構,而本地化的字符串格式是行爲。從代碼/編譯器的角度來看,這兩件事與彼此沒有任何關係,並且將它設置爲「每個類」是沒有意義的。這個問題屬於使用類的代碼的範圍,或者類本身的代碼。
全球文化信息設置爲每個線程(使用Thread.CurrentThread.CurrentCulture
或CultureInfo.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;
}
您可以嘗試轉換您的項目,並在生成的項目上調用ToString,specyfing localizationa(在發生並捕獲InvalidCastException時適當地),因爲它在字符串或數字中是允許的。解決方案充其量是臭,但可行。
您可以檢查,如果對象是一個int /浮在你的循環播放並相應投射,或者在循環播放時設置全球文化。看我的編輯。 – 2010-02-23 16:09:45