Eu tenho dois objetos em c # e não sei se é booleano ou qualquer outro tipo. No entanto, quando eu tento comparar esses c # falha em dar a resposta certa. Eu tentei o mesmo código com o VB.NET e foi isso!
Alguém pode me dizer como corrigir isso, se houver uma solução?
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
você, obtenha o boxe e crie uma caixa contendo true
. Quando você atribui a b
você, obtém outra caixa contendo também true
. Ao comparar a
e b
, como os dois são do tipo tempo de compilação object
, você chama a sobrecarga operator ==(object, object)
definida pela Especificação de idioma do C #. Essa sobrecarga verifica se as referências vão para o mesmo objeto. Como você tem duas caixas, o resultado é false
e a instrução "under" if
não será executada. Para entender isso melhor, tente alterar a atribuição b
para: object b = a;
Agora você tem apenas uma caixa.
a.Equals(b)
?