У мене є два об'єкти в C # і не знаю, булева чи будь-який інший тип. Однак, коли я намагаюся порівняти ці C # не вдається дати правильну відповідь. Я спробував той самий код з VB.NET, і це вдалося!
Хтось може сказати мені, як це виправити, якщо є рішення?
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ви отримуєте бокс і створюєте коробку, що містить true. Коли ви призначаєте, bви отримуєте ще одне поле, що також містить true. Коли ви порівнюєте aі b, оскільки обидва мають тип компіляції object, ви викликаєте перевантаження, operator ==(object, object)визначене мовою C #. Ця перевантаження перевіряє, чи посилання йдуть на один і той же об'єкт. Оскільки у вас є два поля, результат є false, і вислів "під" ваш ifзапуск не буде працювати. Щоб зрозуміти це краще, спробуйте змінити призначення bцього: object b = a;Тепер у вас є лише одне поле.
a.Equals(b)?