代码之家  ›  专栏  ›  技术社区  ›  Gonzo345 Piotr Perak

培养不变胰蛋白酶

  •  1
  • Gonzo345 Piotr Perak  · 技术社区  · 6 年前

    这听起来可能很奇怪,很愚蠢,或者别的什么,但是我很想找到一种“本土”的方法来制作 bool.TryParse(string s, out bool result) 方法不变区域性。

    如果要解析的输入是 "true" "false" 但是如果出现以下情况,它总是返回false作为解析结果 "verdadero" , "wahr" "falso"

    我在MSDN上没有找到任何与此相关的信息,但是有没有办法 bool.TryParse 不变量文化?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Mong Zhu Bart de Boer    6 年前

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

    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}");
    

    它提供以下输出:

    德国输出:真
    西班牙语输出:真
    意大利输出:错误

    这更像是一种玩世不恭的方式。;)

    编辑:

    为此,您还可以使用 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输出:真

        2
  •  0
  •   Mong Zhu Bart de Boer    6 年前

    如果您真的担心不变量区域性问题,可以首先尝试转换它

    string sNew = s.ToString(CultureInfo.InvariantCulture);
    
    bool.TryParse(string sNew, out bool result)