C# 字符串:为什么字符串 a == b 运算符给出的答案与 a.CompareTo(b) == 0 不同?
C# String: why string a == b operator gives different answer than a.CompareTo(b) == 0?
我把 C# 搞得一团糟,发现一段代码给出了非常不舒服的结果:
static void Main(string[] args)
{
string a = "string", b = "string[=11=]";
bool b1 = a == b;
bool b2 = (a.CompareTo(b) > 0);
bool b3 = (a.CompareTo(b) < 0);
bool b4 = (a.CompareTo(b) == 0);
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine("{0} {1} {2} {3}", b1, b2, b3, b4);
}
输出:
string
string
False False False True
预期输出(关于):
string
string
True False False True
String.CompareTo returns 如果字符串实例在排序顺序中的位置与提供的值相同,则为 0。这与比较是否相等不同。所以我希望你描述的结果。
CompareTo
的结果并不意味着相等,它与排序顺序有关。我不确定出于排序目的忽略空字符是否太令人惊讶。
Character sets include ignorable characters. The CompareTo(String) method does not consider such characters when it performs a culture-sensitive comparison.
你想要 StringComparison.Ordinal
标志:只需按字典顺序比较字符串:
...
bool b2 = (a.CompareTo(b, StringComparison.Ordinal) > 0);
bool b3 = (a.CompareTo(b, StringComparison.Ordinal) < 0);
bool b4 = (a.CompareTo(b, StringComparison.Ordinal) == 0);
...
我把 C# 搞得一团糟,发现一段代码给出了非常不舒服的结果:
static void Main(string[] args)
{
string a = "string", b = "string[=11=]";
bool b1 = a == b;
bool b2 = (a.CompareTo(b) > 0);
bool b3 = (a.CompareTo(b) < 0);
bool b4 = (a.CompareTo(b) == 0);
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine("{0} {1} {2} {3}", b1, b2, b3, b4);
}
输出:
string
string
False False False True
预期输出(关于):
string
string
True False False True
String.CompareTo returns 如果字符串实例在排序顺序中的位置与提供的值相同,则为 0。这与比较是否相等不同。所以我希望你描述的结果。
CompareTo
的结果并不意味着相等,它与排序顺序有关。我不确定出于排序目的忽略空字符是否太令人惊讶。
Character sets include ignorable characters. The CompareTo(String) method does not consider such characters when it performs a culture-sensitive comparison.
你想要 StringComparison.Ordinal
标志:只需按字典顺序比较字符串:
...
bool b2 = (a.CompareTo(b, StringComparison.Ordinal) > 0);
bool b3 = (a.CompareTo(b, StringComparison.Ordinal) < 0);
bool b4 = (a.CompareTo(b, StringComparison.Ordinal) == 0);
...