У меня есть два объекта в 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)
?