在C#中通过ISO-4217数字货币码获取字母货币码的方法
在.NET中通过ISO-4217数字货币码获取字母码的解决方案
你问的这个问题很实用,刚好我之前也处理过类似需求。咱们分情况来看:
1. .NET 7及以上版本:有现成API可用
从.NET 7开始,微软在System.Globalization命名空间中引入了CurrencyInfo类,专门用来处理货币相关的信息,其中就包含了ISO-4217的数字码(NumberCode)和字母码(AlphaCode)的映射。
你可以这样实现:
using System.Globalization; using System.Linq; public string GetCurrencyAlphaCode(int numericCode) { var currency = CurrencyInfo.GetCurrencies() .FirstOrDefault(c => c.NumberCode == numericCode); return currency?.AlphaCode ?? throw new ArgumentException("无效的ISO-4217数字货币码"); }
这个方法会遍历所有已知的货币信息,找到匹配数字码的条目,返回对应的三位字母码。如果找不到匹配的,就抛出参数异常。
2. .NET 6及更早版本:需要自定义实现
在旧版本的.NET中,没有直接提供通过数字码查询字母码的内置API,不过我们可以自己构建一个ISO-4217数字码与字母码的映射字典,这样查询效率会很高。
示例代码如下:
// 这里只列出部分常用货币,你可以根据需求补充完整的ISO-4217映射 private static readonly Dictionary<int, string> _currencyNumericToAlphaMap = new Dictionary<int, string> { { 840, "USD" }, { 978, "EUR" }, { 156, "CNY" }, { 826, "GBP" }, { 392, "JPY" }, // 更多货币映射可以参考ISO-4217标准文档补充 }; public string GetCurrencyAlphaCode(int numericCode) { if (_currencyNumericToAlphaMap.TryGetValue(numericCode, out var alphaCode)) { return alphaCode; } throw new ArgumentException("无效的ISO-4217数字货币码"); }
你可以从官方的ISO-4217标准中获取完整的数字与字母码映射表,把它们补充到字典里,这样就能快速查询了。
补充说明
如果你不想手动维护字典,在旧版本中也可以通过遍历RegionInfo来间接获取,但这种方式效率较低,而且有些货币可能没有对应的RegionInfo(比如一些小众货币),所以更推荐直接使用字典的方式。
内容的提问来源于stack exchange,提问作者user5178972
相关产品推荐
相关产品推荐

