从字符串中检索货币符号

Retrieve Currency Symbol from a String

我正在尝试从下拉列表中检索一个元素并将其存储在 string 中。我想将 string 货币符号 转换为 货币代码 。以下是我写的代码:

我写了下面的代码,但我收到一条错误消息:

System.Globalization.CultureNotFoundException: Culture is not supported. Parameter name: name USD - United States dollar is an invalid culture identifier.

public string RetreiveCurrencySymbolFromCode()
{
    string currencycode = " USD-United States Dollars";     
    string FinalCode = Currencycode1.Split('-')[0];      
    CultureInfo Symbol = new CultureInfo(FinalCode);
    return Symbol.NumberFormat.CurrencySymbol;
}

我希望检索 USD 并将其更改为符号 $

好吧,"USD" 货币的名称 (RegionInfo.ISOCurrencySymbol),而 "en-US"文化 (Culture.Name)。让我们获取使用 USD 作为货币的 所有文化

  string FinalCode = "USD";

  var result = CultureInfo
    .GetCultures(CultureTypes.SpecificCultures)
    .Where(culture => new RegionInfo(culture.LCID).ISOCurrencySymbol == FinalCode)
    .ToArray();

  Console.Write(string.Join(Environment.NewLine, result
    .Select(culture => $"{culture.Name,10} : ({culture.NumberFormat.CurrencySymbol}) : {culture.EnglishName}")));

结果:

 en-US : ($) : English (United States)
quz-EC : ($) : Quechua (Ecuador)
en-029 : ($) : English (Caribbean)
 es-EC : ($) : Spanish (Ecuador)
 es-SV : ($) : Spanish (El Salvador)
 es-PR : ($) : Spanish (Puerto Rico)
 es-US : ($) : Spanish (United States)

如您所见,几种不同的 文化可以使用相同的 货币。从技术上讲,您的代码可以实现为

 using System.Text.RegularExpressions;

 ...

 string currencycode = " USD-United States Dollars";     

 ...

 // https://en.wikipedia.org/wiki/ISO_4217
 // ISO_4217 - all codes are 3 capital letters
 string FinalCode = Regex.Match(currencycode, "[A-Z]{3}").Value;

 var culture = CultureInfo
   .GetCultures(CultureTypes.SpecificCultures)
   .Where(culture => new RegionInfo(culture.LCID).ISOCurrencySymbol == FinalCode)
   .FirstOrDefault();

 if (culture != null) 
   return culture.NumberFormat.CurrencySymbol;
 else
   return "???"; // Unknown currency / culture

这里有 2 个问题:

  1. 货币代码ISO 4217三个大写字母的组合(例如USDEURRUB),比较安全方法是 Match 借助正则表达式
  2. 相同的货币可以被多种文化使用。您可能需要一个额外的规则来缩小所需的区域性