我在Silverlight应用程序中有一个比较2个字符串的条件,由于某种原因,当我使用==它时返回false而.Equals()返回true.
这是代码:
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
// Execute code
}
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
// Execute code
}
Run Code Online (Sandbox Code Playgroud)
任何理由为什么会这样?
我有以下代码
CASE 1
string string1 = "pankaj";
string string2 = "pankaj";
Console.WriteLine(string1 == string2); // output TRUE
CASE 2
object obj1 = "pankaj";
object obj2 = "pankaj";
Console.WriteLine(obj1==obj2); // Output TRUE
CASE 3
object againObject1 = 2;
object againObject2 = 2;
Console.WriteLine(againObject1==againObject2); // Output FALSE
Run Code Online (Sandbox Code Playgroud)
因为字符串和对象都是引用类型,对于引用类型,我了解到相等操作检查它们是否包含相同的地址,在上面两种情况下,为什么它的比较值而不是引用.
更令人困惑的是对于类型2中的对象类型的等于运算符的行为和对于字符串类型的情况3,它计算为true,对于整数,它返回false.