Странный результат сравнения значений свойств с помощью отражения - PullRequest
0 голосов
/ 17 сентября 2009

Может кто-нибудь объяснить, почему это происходит? Код ниже был выполнен в непосредственном окне vs2008. Опора - это свойство Int32 (столбец id) объекта, созданного структурой сущностей.

Объекты object и defaultEntity были созданы с использованием Activator.CreateInstance ();

Convert.ChangeType (prop.GetValue (entity, null), prop.PropertyType) 0 Convert.ChangeType (prop.GetValue (defaultEntity, null), prop.PropertyType) 0 Convert.ChangeType (prop.GetValue (entity, null), prop.PropertyType) == Convert.ChangeType (prop.GetValue (defaultEntity, null), prop.PropertyType) ложь

1 Ответ

1 голос
/ 17 сентября 2009

Полагаю, вам интересно, почему в третьей строке выводится false. Если вы хотите узнать, почему первые две строки выводят 0, вам придется опубликовать больше кода и сообщить нам, что вы на самом деле ожидали.

Convert.ChangeType возвращает object. Поэтому, когда тип свойства на самом деле Int32, он вернет в штучной упаковке целое число.

Ваша последняя строка сравнивает ссылки двух значений в штучной упаковке. Эффективно вы делаете:

object x = 0;
object y = 0;
Console.WriteLine (x == y); // Prints False

Вместо этого можно использовать Equals - и статический метод object.Equals легко справится с нулевыми ссылками, если это будет проблемой:

object x = 0;
object y = 0;
Console.WriteLine (object.Equals(x, y)); // Prints True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...