C# 从当前区域性获取货币?

C# 从当前区域性获取货币?,c#,currency,cultureinfo,C#,Currency,Cultureinfo,有没有办法从应用程序区域性设置中动态获取当前信息?基本上,如果用户将文化设置为美国,我想知道货币是美元,或者如果他们将其设置为英国,我想英镑等。。。等等 这样,我可以在付款时将此信息发送给PayPal一旦您拥有CultureInfo ci对象,您可以询问 ci.NumberFormat.CurrencySymbol 对于当前的文化,您只需 CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol 基本上可以使用CultureInfo类 Cu

有没有办法从应用程序区域性设置中动态获取当前信息?基本上,如果用户将文化设置为美国,我想知道货币是美元,或者如果他们将其设置为英国,我想英镑等。。。等等


这样,我可以在付款时将此信息发送给PayPal

一旦您拥有CultureInfo ci对象,您可以询问

ci.NumberFormat.CurrencySymbol
对于当前的文化,您只需

CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol

基本上可以使用CultureInfo类

CultureInfo ci = new CultureInfo(UICulture);
var symbol = ci.NumberFormat.CurrencySymbol;

您可以从
CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol
获取符号,但我怀疑这是否足够;您可能需要为每个区域性维护一个单独的列表。或者让用户告诉你他们想用什么付款(例如,他们可能不在家,等等,因此某些酒店休息室的电脑文化与他们的信用卡上的文化不同)

使用RegionInfo.ISOCurrencySymbol属性。例如:

  var ri = new RegionInfo(System.Threading.Thread.CurrentThread.CurrentUICulture.LCID);
  Console.WriteLine(ri.ISOCurrencySymbol);
产出:“美元”

您需要RegionInfo.CurrencyNativeName、RegionInfo.CurrencyEnglishName或RegionInfo.ISOCurrencySymbol这对我很有用

    public static string GetCurrencySymbol(string currency)
    {
        if (currency == null) return "";
        if (currency == "") return "";
        int i = 0;
        var regionInfo = new RegionInfo(System.Threading.Thread.CurrentThread.CurrentUICulture.LCID);
        foreach (var cultureInfo in CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures))
        {
            if (!cultureInfo.Equals(CultureInfo.InvariantCulture))
            {
                var regionCulture = new RegionInfo(cultureInfo.LCID);

                    if(regionCulture.ISOCurrencySymbol == currency)
                    {
                        //list.Add(regionCulture);
                        regionInfo = regionCulture;
                    }
                }
        }
var c = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
      .Select(t=> new RegionInfo(t.LCID))
      .Where(t=>t.ThreeLetterISORegionName  == "USA")
      .FirstOrDefault();

不一定足够好,因为货币符号可能不唯一。这将返回非ISO货币符号。例如,您将获得欧元符号,如€。不够好-抱歉。货币符号不是货币-没有唯一性的要求。我认为paypal期望“USD”是ISO货币代码。这应该可以完美地工作!今天下午我会试试,如果有效的话,我会把答案标记为:)谢谢等币符号是三个字母的代码(例如美元)。NumberFormat.CurrencySymbol检索到的符号或符号(例如,$)不是唯一的。只是警告CurrentRegion不是来自当前UI区域性,并且更改当前线程的区域性不会更改CurrentRegion-为此,请每次通过@Hans PassantO(N)搜索查看答案??为什么不让它成为一个递归函数并做一些记忆呢?这正是我想要的,但你们必须先导入系统。全球化。谢谢
var c = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
      .Select(t=> new RegionInfo(t.LCID))
      .Where(t=>t.ThreeLetterISORegionName  == "USA")
      .FirstOrDefault();