2012-02-10 68 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