Здравствуйте, Visor2004, Вы писали:
V>на тип T никаких ограничений не наложено.
Я бы использовал стандартный обобщенный сревниватель:
EqualityComparer<T>.Default.
Привет, у меня есть 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 никаких ограничений не наложено.