C# 从字符串中检索货币符号
我试图从下拉列表中检索一个元素,并将其存储在C# 从字符串中检索货币符号,c#,selenium,selenium-webdriver,globalization,C#,Selenium,Selenium Webdriver,Globalization,我试图从下拉列表中检索一个元素,并将其存储在字符串中。我想将字符串货币符号转换为货币代码。以下是我编写的代码: 我写了以下代码,但收到一条错误消息: System.Globalization.CultureNotFoundException:区域性不是 支持。参数名称:名称USD-美元是一个 无效的区域性标识符 我希望检索USD并将其更改为symbol$嗯,USD“是一种货币的名称(RegionInfo.ISOCurrencySymbol),而“en-US”是一种文化的(预期)名称(cultur
字符串中。我想将字符串
货币符号转换为货币代码。以下是我编写的代码:
我写了以下代码,但收到一条错误消息:
System.Globalization.CultureNotFoundException:区域性不是
支持。参数名称:名称USD-美元是一个
无效的区域性标识符
我希望检索USD并将其更改为symbol$嗯,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
这里有两个问题:
货币代码是三个大写字母的组合(例如,USD
,EUR
,RUB
),更安全的方法是借助正则表达式进行匹配
同一种货币可用于多种文化。您可能需要一个额外的规则来缩小所需的区域性
谢谢@Dmitry,正则表达式帮助我解决了这个问题。再次感谢你的帮助
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