任何获得货币名称列表并将其映射到货币符号的方法

本文关键字:货币 映射 符号 方法 列表 任何获 | 更新日期: 2023-09-27 18:08:21

我有c#代码可以生成这样的列表,使用文化(链接):

AUD $ 
CAD $ 
EUR € 
GBP £ 
JPY ¥ 
USD $ 

我想要一个这样的列表:

Australian Dollar
Canadian Dollar
Euro
British Pound
Japanese Yen
United States Dollar

我实际上想要的是应该有一个下拉样式的Winforms组合框,用户从中选择货币,如British Pound,然后通过函数或其他东西,GBP£得到返回。这将帮助我解析用户可能在相邻的货币值文本框中键入的货币值。

那么我可以使用文化(或其他不需要互联网连接的东西)来获得描述性货币名称列表吗?

任何获得货币名称列表并将其映射到货币符号的方法

如果你正在使用完整的。net框架,*你可以通过枚举CultureInfo实例并通过LCID创建相关的RegionInfo来获取唯一的货币。然后,您可以从RegionInfo返回相关的货币字段,即ISOCurrencySymbol, CurrencyEnglishNameCurrencySymbol

例如,下面的代码将返回不同的ISOCurrencySymbol以及相关的名称和符号。

var currencies = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
    .Select(ci => ci.LCID).Distinct()
    .Select(id => new RegionInfo(id))
    .GroupBy(r => r.ISOCurrencySymbol)
    .Select(g => g.First())
    .Select(r => new
    {
        r.ISOCurrencySymbol,
        r.CurrencyEnglishName,
        r.CurrencySymbol,
    });

对于原问题中提供的ISO符号,将返回以下信息:

澳元,美元,澳元
加元,美元,加元
欧元,?,欧元
GBP,£,British Pound
日元,日元,日元
USD, $, US Dollar


注意:RegionInfo.CurrencyNativeName也存在,但它将以给定区域的本地语言提供货币名称。因此,相同的ISOCurrencySymbol可能有不同的CurrencyNativeName实例与之关联,并且在此场景中对映射没有用处。

* . net Core似乎不支持枚举CultureInfo .

我认为最简单的方法是为货币创建一个包装类,如下所示:

public class Currency
{
   public string Code { get; set; }  // USD
   public string Name { get; set; }  // United States Dollar
   public string Symbol { get; set; } // $
}

您可以创建这些类的集合,并将Name设置为在组合框中显示的成员。在用户选择了某个值之后,您可以很容易地使用Linq(例如)来获取相应的类。