3

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

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

我想要的也是这样的列表:

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

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

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

4

2 回答 2

3

如果您使用的是完整的 .NET Framework,* 您可以通过枚举CultureInfo实例并创建相关RegionInfo的.NET 框架来获取唯一货币LCID。然后,您可以从 中返回相关货币字段RegionInfo,即ISOCurrencySymbolCurrencyEnglishNameCurrencySymbol

例如,以下代码将返回 distinctISOCurrencySymbol以及关联的名称和符号。

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 符号,将返回以下信息:

AUD, $, 澳元
CAD, $, 加元
EUR, ?, 欧元
GBP, £, 英镑
JPY, ¥, 日元
USD, $, 美元


注意:RegionInfo.CurrencyNativeName也存在,但它将以给定地区的母语提供货币名称。因此,它可能具有与之关联的ISOCurrencySymbol各种实例,并且在这种情况下对映射没有用处。CurrencyNativeName

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

于 2017-08-11T21:01:06.567 回答
0

在我看来,最简单的方法是为 Currency 创建一个包装类,如下所示:

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

您可以创建这些类的集合并将其设置Name为要在组合框中显示的成员。用户选择某个值后,您可以轻松地使用 Linq 例如获取对应的类。

于 2013-04-11T11:06:56.813 回答