Сегодня я наткнулся на интересную ошибку, которую написал. У меня есть набор свойств, которые можно установить с помощью общего сеттера. Эти свойства могут быть типами значений или ссылочными типами.
public void SetValue( TEnum property, object value )
{
if ( _properties[ property ] != value )
{
// Only come here when the new value is different.
}
}
При написании модульный тест для этого метода я обнаружил, что условие всегда выполняется для типов значений. Мне не потребовалось много времени, чтобы понять, что это связано с упаковкой / распаковкой . Это не заняло много времени чтобы настроить код следующим образом:
public void SetValue( TEnum property, object value )
{
if ( !_properties[ property ].Equals( value ) )
{
// Only come here when the new value is different.
}
}
Дело в том, что я не полностью удовлетворен этим решением. Я хотел бы провести простое эталонное сравнение, если значение не помещено в рамку.
Текущее решение, о котором я думаю, вызывает только Equals ()
для значений в коробке. Выполнение проверки упакованных значений кажется немного излишним. Разве нет более простого способа?