C#字符串:为什么字符串a == b运算符给出与a.CompareTo(b)== 0不同的答案?
问题描述:
我弄乱用C#一点,发现产生非常不舒服的结果的代码:C#字符串:为什么字符串a == b运算符给出与a.CompareTo(b)== 0不同的答案?
static void Main(string[] args)
{
string a = "string", b = "string\0";
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
答
CompareTo
的结果并不意味着平等,它与排序顺序有关。我不确定为排序目的而忽略空字符是否太令人吃惊。
字符集包括忽略字符。 CompareTo(String)方法在执行文化敏感比较时不会考虑这些字符。
+0
如果你正在寻找等价的方法使用a.Equals(b) – TwistedStem
+0
但它可能是安全问题或一个错误谁认为'CompareTo()== 0'给与相等运算符相同的结果。 – nikartix
答
你想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);
...
您可以编辑您的文章,并添加您预期的输出? –