Корректное сравнение значений generic аргументов
От: Visor2004  
Дата: 31.01.12 08:01
Оценка:
Привет, у меня есть generic класс, в котором есть generic свойство, установка, которого влечет за собой много всякой работы, поэтому не хочется менять при записи значения, которое уже задано. Написал для этого вот такой метод:
class Test [ T ]
{
    public Test2 : T
    {
       ....
       set
       {
             when ( CheckChangePossibility ( value ) )
                 data = value;
       }
    }
    ...
    CheckChangePossibility ( newValue : T ) : bool
    {
      // if value is really changed
      def isNull = effectiveValue : object == null;
      def isNewValueNull = newValue : object == null;

      mutable changeFlag = ! ( isNull && isNewValueNull );

      when ( data is IEquatable [ T ] )
      {
        def e1 = data :> IEquatable [ T ];
        def e2 = newValue :> IEquatable [ T ];
        
        when ( !isNull && !isNewValueNull )
          changeFlag = e1.Equals ( e2 );
      }

      changeFlag
    }
}

Что скажут специалисты, такой проверки будет достаточно, чтобы однозначно сказать, что пользователь обновляет значение свойства чем-то новым или надо еще что-то проверить? на тип T никаких ограничений не наложено.
Помните!!! ваш говнокод кому-то предстоит разгребать.
Re: Корректное сравнение значений generic аргументов
От: hardcase Пират http://nemerle.org
Дата: 31.01.12 15:43
Оценка: +1
Здравствуйте, Visor2004, Вы писали:

V>на тип T никаких ограничений не наложено.


Я бы использовал стандартный обобщенный сревниватель: EqualityComparer<T>.Default.
/* иЗвиНите зА неРовнЫй поЧерК */
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.