У мене є два об'єкти в 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)
?