Ich habe zwei Objekte in C # und weiß nicht, ob es sich um einen Booleschen oder einen anderen Typ handelt. Wenn ich jedoch versuche, diese C # zu vergleichen, kann ich nicht die richtige Antwort geben. Ich habe den gleichen Code mit VB.NET ausprobiert und das hat es geschafft!
Kann mir jemand sagen, wie ich das beheben kann, wenn es eine Lösung gibt?
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
Sie Boxen und erstellen eine Box mit true
. Wenn Sie zuweisen, erhalten b
Sie eine weitere Box, die ebenfalls enthält true
. Wenn Sie vergleichen a
und b
, da beide vom Typ Kompilierungszeit sind object
, rufen Sie die Überladung auf, operator ==(object, object)
die in der C # -Sprachenspezifikation definiert ist. Diese Überladung prüft, ob die Referenzen auf dasselbe Objekt verweisen. Da Sie zwei Felder haben, ist das Ergebnis false
und die Anweisung "unter" if
wird nicht ausgeführt. Um dies besser zu verstehen, versuchen Sie, die Zuordnung folgendermaßen zu ändern b
: object b = a;
Jetzt haben Sie nur noch eine Box.
a.Equals(b)
?