Tengo dos objetos en C # y no sé si es booleano o de cualquier otro tipo. Sin embargo, cuando trato de comparar esos C # no puede dar la respuesta correcta. He intentado el mismo código con VB.NET y ¡lo hice!
¿Alguien puede decirme cómo solucionar esto si hay una solución?
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
, obtiene boxeo y crea un cuadro que contiene true
. Cuando lo asigna b
, obtiene otro cuadro que también contiene true
. Cuando compara a
y b
, dado que ambos son del tipo de tiempo de compilación object
, llama a la sobrecarga operator ==(object, object)
definida por la Especificación del lenguaje C #. Esta sobrecarga verifica si las referencias van al mismo objeto. Como tiene dos cuadros, el resultado es false
, y la declaración "debajo" if
no se ejecutará. Para comprender esto mejor, intente cambiar la asignación de b
a esto: object b = a;
ahora solo tiene una casilla.
a.Equals(b)
?