他们真的一样吗?今天,我遇到了这个问题.这是立即窗口的转储:
?s
"Category"
?tvi.Header
"Category"
?s == tvi.Header
false
?s.Equals(tvi.Header)
true
?s == tvi.Header.ToString()
true
Run Code Online (Sandbox Code Playgroud)
所以,无论是s和tvi.Header包含"类别",而是==返回false,并Equals()返回true.
s被定义为字符串,tvi.Header实际上是一个WPF TreeViewItem.Header.那么,他们为什么会回归不同的结果呢?我一直认为它们可以在C#中互换.
任何人都可以解释为什么会这样吗?
==和Equals()示例有什么区别?我知道==用于比较运算符和Equals()方法用于比较string的内容.所以我试过
// first example
string s1 = "a";
string s2 = "a";
Console.Write(a.Equals(s2)); // returns true, but if I assign "b" to s2,
// then result will be false
// second example
string s1 ="a";
string s2 ="a";
Console.Write(s1 == s2); // returns true
Run Code Online (Sandbox Code Playgroud)
怎么会这样?两者都是不同的对象引用.假设我们认为这些是参考.但我试着这样使用
string s1 = new string("ab");
string s2 = new string("ab");
Run Code Online (Sandbox Code Playgroud)
我收到编译时错误,无法将字符串转换为char