Ho due oggetti in C # e non so se è booleano o qualsiasi altro tipo. Tuttavia, quando provo a confrontare quei C # non riesce a dare la risposta giusta. Ho provato lo stesso codice con VB.NET e lo ha fatto!
Qualcuno può dirmi come risolvere questo problema se esiste una soluzione?
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
ottieni boxe e crea una scatola contenente true
. Quando ti assegni b
ottieni un'altra casella contenente anche true
. Quando si confronta a
e b
, poiché entrambi sono di tipo tempo di compilazione object
, si chiama il sovraccarico operator ==(object, object)
definito dalla specifica del linguaggio C #. Questo sovraccarico controlla se i riferimenti vanno allo stesso oggetto. Poiché hai due caselle, il risultato è false
e la frase "sotto" if
non verrà eseguita. Per capirlo meglio, prova a cambiare il compito b
in questo: object b = a;
ora hai solo una casella.
a.Equals(b)
?