Mam dwa obiekty w C # i nie wiem, czy jest to typ Boolean, czy inny. Jednak gdy próbuję porównać te C # nie daje poprawnej odpowiedzi. Wypróbowałem ten sam kod z VB.NET i to się udało!
Czy ktoś może mi powiedzieć, jak to naprawić, jeśli istnieje rozwiązanie?
DO#:
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
siebie otrzymujesz boks i utworzysz pudełko zawierające true
. Kiedy przypisujesz do b
siebie, otrzymasz kolejne pudełko zawierające również true
. Podczas porównywania a
i b
, ponieważ oba są typu czasu kompilacji object
, wywołujesz przeciążenie operator ==(object, object)
zdefiniowane przez specyfikację języka C #. To przeciążenie sprawdza, czy odwołania przechodzą do tego samego obiektu. Ponieważ masz dwa pola, wynikiem jest false
, a stwierdzenie „pod” if
nie będzie działać. Aby lepiej to zrozumieć, spróbuj zmienić przypisanie b
do tego: object b = a;
Teraz masz tylko jedno pudełko.
a.Equals(b)
?