Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用“==”运算符和string.Equals()方法比较字符串是否存在全球化问题?_C#_.net_Vb.net - Fatal编程技术网

C# 使用“==”运算符和string.Equals()方法比较字符串是否存在全球化问题?

C# 使用“==”运算符和string.Equals()方法比较字符串是否存在全球化问题?,c#,.net,vb.net,C#,.net,Vb.net,使用“==”运算符和string.Equals方法比较字符串是否存在全球化问题?如果是,有什么解决方案可以避免这种情况?==运算符和.equalString和.equalObject重载都使用顺序字符串比较,并且与区域性无关 这与依赖于区域性的.CompareTo不同。运算符==和.equalString以及.equalObject重载都使用顺序字符串比较,并且与区域性无关 这与依赖于区域性的.CompareTo不同。对于String.Equals,您可以使用或stringcomparation

使用“==”运算符和string.Equals方法比较字符串是否存在全球化问题?如果是,有什么解决方案可以避免这种情况?

==运算符和.equalString和.equalObject重载都使用顺序字符串比较,并且与区域性无关

这与依赖于区域性的.CompareTo不同。

运算符==和.equalString以及.equalObject重载都使用顺序字符串比较,并且与区域性无关

这与依赖于区域性的.CompareTo不同。

对于String.Equals,您可以使用或stringcomparation.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);
如果使用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对象。