Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从字符串中检索货币符号_C#_Selenium_Selenium Webdriver_Globalization - Fatal编程技术网

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