使用' ==
'是否存在全球化问题?运算符和string.Equals()
方法比较字符串?如果是,那么避免这种情况的解决方案是什么?
答案 0 :(得分:5)
使用String.Equals
,您可以使用StringComparison.InvariantCultureIgnoreCase
或StringComparison.InvariantCulture
,使用==
您无法执行此操作。
您应该看到:The Turkish İ Problem and Why You Should Care
同一篇文章中的代码段:
using System;
using System.Globalization;
using System.Threading;
internal class Program
{
private static void Main(string[] args)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("tr-TR");
const string input = "interesting";
bool comparison = input.ToUpper() == "INTERESTING";
Console.WriteLine("These things are equal: " + comparison);
Console.ReadLine();
}
}
以上将使用false
运算符
==
进行相等比较
您可以在上面的代码中尝试以下行
bool Comparison2 = input.Equals("INTERESTING",
StringComparison.InvariantCultureIgnoreCase);
,结果为true
答案 1 :(得分:2)
==
运算符以及.Equals(string)
和.Equals(object)
重载都使用序数字符串比较,并且它与文化无关。
这与文化相关的.CompareTo
不同。