任何获得货币名称列表并将其映射到货币符号的方法
本文关键字:货币 映射 符号 方法 列表 任何获 | 更新日期: 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
, CurrencyEnglishName
和CurrencySymbol
。
例如,下面的代码将返回不同的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(例如)来获取相应的类。