不受文化影响的bool.TryParse

3

这可能听起来很奇怪、愚蠢或其他什么,但我很好奇是否有一种“本地化”的方法可以使 bool.TryParse(string s, out bool result) 方法保持不变的文化。

当然,如果要解析的输入是 "true""false",它当然可以工作,但如果传递类似于 "verdadero""wahr""falso" 的内容,则始终会返回 false 作为解析结果。

我在 MSDN 上没有找到任何相关的信息,但是否有办法使 bool.TryParse 保持 InvariantCulture 呢?


2
它已经与不变文化“绑定”了,唯一被认可的两个值是Boolean.TrueStringBoolean.FalseString。你需要一个假设的Parse()方法来接受本地化字符串值吗?你必须自己编写它... - Adriano Repetti
2个回答

2
一个有趣的方法是这样的。我找到了这个很好的翻译代码:
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();
}

这个回答中,你可以像这样使用它:

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

它实际上是有效的!输出:

德语(德国)输出:True
德语(德国)输出:False


0
如果您真的担心不变文化问题,可以先尝试转换它。
string sNew = s.ToString(CultureInfo.InvariantCulture);

bool.TryParse(string sNew, out bool result)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接