C# 使用“==”运算符和string.Equals()方法比较字符串是否存在全球化问题?
使用“==”运算符和string.Equals方法比较字符串是否存在全球化问题?如果是,有什么解决方案可以避免这种情况?==运算符和.equalString和.equalObject重载都使用顺序字符串比较,并且与区域性无关 这与依赖于区域性的.CompareTo不同。运算符==和.equalString以及.equalObject重载都使用顺序字符串比较,并且与区域性无关 这与依赖于区域性的.CompareTo不同。对于String.Equals,您可以使用或stringcomparation.InvariantCulture,对于==您不能这样做 你应该看到: 来自同一篇文章的代码片段:C# 使用“==”运算符和string.Equals()方法比较字符串是否存在全球化问题?,c#,.net,vb.net,C#,.net,Vb.net,使用“==”运算符和string.Equals方法比较字符串是否存在全球化问题?如果是,有什么解决方案可以避免这种情况?==运算符和.equalString和.equalObject重载都使用顺序字符串比较,并且与区域性无关 这与依赖于区域性的.CompareTo不同。运算符==和.equalString以及.equalObject重载都使用顺序字符串比较,并且与区域性无关 这与依赖于区域性的.CompareTo不同。对于String.Equals,您可以使用或stringcomparation
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);
如果使用String.Equals,则结果将为true,您可以使用或StringComparison.InvariantCulture,如果使用==则不能这样做
你应该看到:
来自同一篇文章的代码片段:
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);
结果将是正确的值得注意的是,排序方法通常使用CompareTo,因此在排序之前设置使用的区域性非常重要。使用==运算符时是否存在全球化问题?@Jameel问题是==逐个字符查看原始字符串,而不考虑区域性问题。例如,ss和ß与==不同。但是可能存在ss和ß被视为相等的区域性,即使它们由不同的字符序列组成。值得注意的是,排序方法通常使用CompareTo,因此在排序之前设置使用的区域性很重要。使用==运算符时是否存在全球化问题?@Jameel问题是==查看原始字符串,一个角色对一个角色,没有文化问题。例如,ss和ß与==不同。但是可能存在这样的文化,即ss和ß被认为是相等的,即使它们由不同的字符序列组成。ToUpper当然取决于文化,因为在上述情况下,兴趣变得有趣,而不是代码中测试的文字。@JeppeStigNielsen,我想强调的是,平等的全球化问题可以得到解决,因为==它不可能,'=='运算符会造成全球化问题?对吗?所以在全球化的情况下使用赋值运算符不是一个好的做法?对吗?@Habib所以重点是,==不依赖于区域性,.Equals的一个参数重载不依赖于区域性。如果您想依赖于文化,请考虑使用StrimeCulr.CurrnFult对象。这是一个ToupPLE问题。ToUpper当然取决于文化,因为在上述情况下,兴趣变得有趣,而不是代码中测试的文字。@JeppeStigNielsen,我想强调的是,平等的全球化问题可以得到解决,因为==它不可能,'=='运算符会造成全球化问题?对吗?所以在全球化的情况下使用赋值运算符不是一个好的做法?对吗?@Habib所以重点是,==不依赖于区域性,.Equals的一个参数重载不依赖于区域性。如果您想依赖于文化,请考虑使用StrimeCulr.CurrnFult对象。