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