2012-02-10 97 views
7

我需要爲不同的貨幣代碼獲取System.Globalization.CultureInfo。從貨幣代碼中獲取CultureInfo?

例子:歐元,英鎊,美元

目前我在做基於此3個字母的貨幣代碼在switch語句下面,顯然這是不這樣做的方式:

var ci = new System.Globalization.CultureInfo("en-US"); 

任何人都有一個乾淨的方式來取代使用貨幣代碼的相同結果?

+1

當有多種文化具有相同的貨幣時,您希望從EUR獲得什麼文化? – 2012-02-10 16:02:09

+0

許多文化共享貨幣。你打算如何繪製這個圖?例如,EUR映射到什麼地方? – tdammers 2012-02-10 16:02:44

+1

我想這回答我的問題,我想要FR-FR,所以我將不得不爲我想要的結果創建查找表 - 謝謝Jon Skeet! – Slee 2012-02-10 16:04:41

回答

12

短:這是不可能的。例如歐元將映射到de-DE,fr-FR,nl-NL和其他國家。沒有從貨幣到文化的映射,因爲多個國家共享貨幣。

16
static IEnumerable<CultureInfo> GetCultureInfosByCurrencySymbol(string currencySymbol) 
{ 
    if (currencySymbol == null) 
    { 
     throw new ArgumentNullException("currencySymbol"); 
    } 

    return CultureInfo.GetCultures(CultureTypes.SpecificCultures) 
     .Where(x => new RegionInfo(x.LCID).ISOCurrencySymbol == currencySymbol); 
} 

例如

foreach (var culture in GetCultureInfosByCurrencySymbol("GBP")) 
{ 
    Console.WriteLine(culture.Name); 
} 

打印:

cy-GB 
gd-GB 
en-GB 
+0

所有我需要的是ISO代碼(「GBP」)和dec使用地點的數量(2)之間的查找,所以這種方法對我有用。我只是採取了第一種文化,並使用文化.NumberFormat.CurrencyDecimalDigits在啓動時構建查找。這假定所有共享貨幣的文化都使用相同數量的十位數,這對我的海豚來說是一個足夠好的假設。 – 2014-06-27 15:53:40