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