2013-04-09 1 views
1

У меня есть C# код, который может генерировать список, как это, с помощью культур (link):Любой способ получить список имен валют и сопоставить их с символами валюты?

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

То, что я хочу, это список, как это тоже:

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

То, что я на самом деле хочу, чтобы должен быть раскрывающийся стиль Winforms Combobox, из которого пользователь выбирает валюту, например British Pound, а затем через функцию или что-то, возвращаетсяили £. Это поможет мне разобрать значение валюты, которое пользователь может ввести в текстовое поле смежной валюты.

Могу ли я использовать Культуры (или что-то еще, что не требует подключения к Интернету), чтобы получить описательный список имен валют?

ответ

0

На мой взгляд, самый простой способ сделать это было бы создать класс-оболочку для валюты, что-то вроде этого:

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

Вы можете создать коллекцию этих классов и установить Name в качестве члена в отобразите в своем поле со списком. После того как пользователь выберет какое-то значение, вы можете легко использовать Linq, например, для получения соответствующего класса.

0

Если вы используете полную .NET Framework, * вы можете получать уникальные валюты, перечисляя через экземпляры CultureInfo и создавая связанные RegionInfo на LCID. Затем вы можете вернуть соответствующие валютные поля от 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, предусмотренных в первоначальном вопросе, то следующая информация будет возвращена:

AUD, $, австралийский доллар
CAD, $, канадский доллар
EUR,,? Евро
GBP, £, британский фунт
JPY, ¥, японская иена
USD, $, доллар США


Примечание: RegionInfo.CurrencyNativeName также существует, но это обеспечит название валюты на родном языке данного региона. Таким образом, тот же ISOCurrencySymbol может иметь различные экземпляры ассоциированного с ним CurrencyNativeName и не будет полезен для сопоставления в этом сценарии.

* .NET Core не поддерживает перечисление CultureInfo.

+0

Для удовольствия я написал вспомогательный класс под названием 'CurrencyInfo', который обертывает вышеуказанное поведение. https://gist.github.com/pjking07/88b9e7127ec4a1208a055ab067adf79d –

 Смежные вопросы

  • Нет связанных вопросов^_^