文化不变 bool.TryParse

Culture invariant bool.TryParse

这听起来可能很奇怪、愚蠢或其他什么,但我很好奇找到一种 "native" 方法来使 bool.TryParse(string s, out bool result) 方法不变文化。

如果要解析的输入是"true""false",它当然可以工作,但如果像"verdadero"这样的东西,它总是return false作为解析结果, "wahr""falso" 将通过。

我在 MSDN 上没有找到任何与此相关的内容,但是有什么方法可以实现 bool.TryParse InvariantCulture 吗?

一个有趣的方法可能是这样。我找到了这段不错的翻译代码:

public static string TranslateText( string input, string languagePair)
{
    string url = String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", input, languagePair);
    HttpClient httpClient = new HttpClient();
    string result = httpClient.GetStringAsync(url).Result;
    result = result.Substring(result.IndexOf("<span title=\"") + "<span title=\"".Length);
    result = result.Substring(result.IndexOf(">") + 1);
    result = result.Substring(0, result.IndexOf("</span>"));
    return result.Trim();
}

this answer

你可以这样使用它:

bool output;

Boolean.TryParse(TranslateText("wahr", "de|en"), out output);
Console.WriteLine($"German Output: {output}");

Boolean.TryParse(TranslateText("verdadero", "esp|en"), out output);
Console.WriteLine($"Spanish Output: {output}");

Boolean.TryParse(TranslateText("falso", "it|en"), out output);
Console.WriteLine($"Italian Output: {output}");

它为您提供以下输出:

German Output: True
Spanish Output: True
Italian Output: False

它更像是一种有趣的方法。 ;)

编辑:

为此,您还可以使用 System.Globalization.CultureInfo.CurrentCulture

Boolean.TryParse(TranslateText("wahr", System.Globalization.CultureInfo.CurrentCulture + "|en"), out output);
Console.WriteLine($"{System.Globalization.CultureInfo.CurrentCulture} Output: {output}");
Boolean.TryParse(TranslateText("falsch", System.Globalization.CultureInfo.CurrentCulture + "|en"), out output);
Console.WriteLine($"{System.Globalization.CultureInfo.CurrentCulture} Output: {output}");

而且它确实有效!输出:

de-DE Output: True
de-DE Output: False

如果你真的担心不变文化问题,你可以先尝试转换它

string sNew = s.ToString(CultureInfo.InvariantCulture);

bool.TryParse(string sNew, out bool result)