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
asiebie otrzymujesz boks i utworzysz pudełko zawierające true. Kiedy przypisujesz do bsiebie, otrzymasz kolejne pudełko zawierające również true. Podczas porównywania ai 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” ifnie będzie działać. Aby lepiej to zrozumieć, spróbuj zmienić przypisanie bdo tego: object b = a;Teraz masz tylko jedno pudełko.
a.Equals(b)?