【问题标题】:Is there a way to "try parse" a string to System.Globalization.CultureInfo有没有办法“尝试解析”一个字符串到 System.Globalization.CultureInfo
【发布时间】:2012-09-10 05:06:07
【问题描述】:

在 C# 中,我使用的是

CultureInfo.GetCultureInfo(myCulture)

但是字符串变量的格式可能不是很好,有没有办法先解析字符串或者先验证一下。

【问题讨论】:

  • tryParse 什么?到int
  • @Habib 正如他在标题中所写,他想将string 解析为CultureInfo
  • @UweKeim,现在看到答案,问题变得更加清晰。

标签: c# cultureinfo


【解决方案1】:

以下产生所有文化的集合:

CultureInfo.GetCultures(CultureTypes.AllCultures)

从那里开始,而不是 GetCultureInfo 你可以这样做:

.FirstOrDefault(c => c.Name == myCulture)

您可能想要过滤掉SpecificCultures,而不是AllCultures

【讨论】:

  • 如果您经常这样做,您甚至可以在Dictionary<,> 中了解所有文化。如:static readonly Dictionary<string, CultureInfo> CultureDict = CultureInfo.GetCultures(CultureTypes.AllCultures).ToDictionary(c => c.Name);
【解决方案2】:

没有文化对象的tryparse。一种方法是按照建议遍历所有文化并寻找其中一种,另一种方法是使用简单的 try 解析:

try
{
    // making sure the lang is a calture
    System.Globalization.CultureInfo c = new System.Globalization.CultureInfo(lang);
}
catch
{
    lang = Session["lang"].ToString();
}

【讨论】:

  • 你永远不应该做这样的事情!将catch 更改为catch(CultureNotFoundException ex)
【解决方案3】:

我总是在我的项目中使用一个小助手。所有算术类型都有 TryParse 方法

public static bool TryParseDouble(this string text, out double value)
{
   return double.TryParse(text, NumberStyles.Any,
                          CultureInfo.InvariantCulture, out value);
}

用法

double value;
bool isStringOK = theString.TryParseDouble(out value);

【讨论】:

  • 那么double 与原发帖人所问的CultureInfo 有什么关系?
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
相关资源
最近更新 更多