文化不变 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)
这听起来可能很奇怪、愚蠢或其他什么,但我很好奇找到一种 "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)