Определение эквивалентности объектов для типов значений, ссылочных типов и списков IL в .net - PullRequest
0 голосов
/ 01 ноября 2009

У меня есть класс со свойством под названием «Значение» типа Object. Значение может быть любого типа, структуры, класса, массива, IList и т. Д.

Моя проблема с установщиком и определением, изменилось ли значение. Это достаточно просто для типов значений, но ссылочные типы и списки представляют проблему.

Для класса, вы предполагаете, что метод Equals был реализован правильно, или просто предполагаете, что значение меняется каждый раз, когда вызывается сеттер? Если я предположил, что это изменилось, то, возможно, я должен предположить, что это также относится и к типам значений, чтобы поведение было согласованным.

Список можно проверить по размеру, а затем по каждому предмету в коллекции, чтобы узнать, изменились ли они.

Как вы, ребята, справляетесь с этой проблемой?

Ответы [ 2 ]

5 голосов
/ 01 ноября 2009

Вместо того, чтобы

object Value

Вы можете объявить

IEquatable<T> Value

Таким образом, вы знаете, что все экземпляры Value будут реализовывать метод Equals. Таким образом, вы можете проверить равенство двух экземпляров.

4 голосов
/ 01 ноября 2009

Почему вас должно волновать, изменилось ли значение или нет? Есть ли причина, по которой вы не можете просто предполагать, что значение изменяется каждый раз, когда вызывается сеттер?

Если есть веская техническая причина, вы всегда можете использовать дженерики и сделать свой Value типа IEquatable<T> вместо типа object. Это гарантирует, что объект реализовал метод Equals().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...