我在C#中有两个对象,不知道它是布尔型还是任何其他类型。但是,当我尝试比较时,这些C#无法给出正确的答案。我已经用VB.NET尝试了相同的代码,并且做到了!
如果有解决办法,谁能告诉我该如何解决?
C#:
object a = true;
object b = true;
object c = false;
if (a == b) c = true;
MessageBox.Show(c.ToString()); //Outputs False !!
VB.NET:
Dim a As Object = True
Dim b As Object = True
Dim c As Object = False
If (a = b) Then c = True
MessageBox.Show(c.ToString()) '// Outputs True
a
您时,将得到装箱并创建一个包含的框true
。当您分配给b
您时,还会得到另一个包含的框true
。比较a
和时b
,由于两者都是编译时类型object
,因此您将调用operator ==(object, object)
C#语言规范定义的重载。此重载检查引用是否到达同一对象。由于您有两个框,结果为false
,并且语句“在...之下” if
将不会运行。为了更好地理解这一点,请尝试将其分配b
给它:object b = a;
现在只有一个框。
a.Equals(b)
怎么办?