2013-04-09 70 views
1

我有C#代碼可以生成像這樣的列表,使用文化(link):任何方式獲取貨幣名稱列表並將其映射到貨幣符號?

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

我想要的是像這樣的列表太:

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

我真正想要的是,應該有一個下拉式的組合框的WinForms,從用戶選擇的貨幣,如British Pound,然後通過功能什麼的,GBP£被退回。這將幫助我解析用戶可能在相鄰貨幣值文本框中鍵入的貨幣值。

所以我可以用文化(或別的東西,它不需要互聯網連接)來得到一個描述性的貨幣名稱列表?

回答

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實例並創建相關的RegionInfoLCID來獲取唯一的貨幣。然後,您可以從RegionInfo返回相關的貨幣領域,即:ISOCurrencySymbolCurrencyEnglishNameCurrencySymbol

例如,下面的代碼將返回不同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,$,加拿大元
歐元,?歐元
英鎊,£英鎊
JPY,¥,日元
美元,$,美元


注意:RegionInfo.CurrencyNativeName也存在,但它會提供給定區域的本地語言的貨幣名稱。因此,同一個ISOCurrencySymbol可能會有與其關聯的CurrencyNativeName的各種實例,並且在此場景中映射不會有用。

* .NET核心似乎並不支持枚舉CultureInfo

+0

爲了好玩,我寫了名爲'CurrencyInfo'一個助手類,它封裝了上述行爲。 https://gist.github.com/pjking07/88b9e7127ec4a1208a055ab067adf79d – 2017-08-11 21:04:16