我今天早些时候遇到了一个奇怪的问题。我正在比较两个字符串,而==
运算符正在评估false
。 s1.Equals(s2)
函数将评估为true
。
是什么导致了这种行为?
感谢。
答案 0 :(得分:3)
您可能会与错误的运算符重载进行比较:operator == (object a, object b)
而不是operator == (string a, string b)
。
默认的==
运算符检查引用相等性,但如果两个操作数都是string
类型的表达式,则使用string
重载,并比较字符串相等性。
如果其中一个操作数是{em>不的string
类型,则编译器将选择operator == (object a, object b)
重载。
以下代码将重现该问题:
object a = "foo";
object b = "FOO".ToLowerInvariant(); // Avoid string interning
Console.WriteLine(a == b); // False
此代码确保创建两个相同的字符串,这些字符串不相等。如果我使用"foo"
作为b
的值,则两个对象都将指向相同的引用,并且引用相等性比较将返回true
。