Сравнение типов значений в штучной упаковке

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

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 () для значений в коробке. Выполнение проверки упакованных значений кажется немного излишним. Разве нет более простого способа?

35
задан Community 23 May 2017 в 12:00
поделиться