今天我偶然发现了我写的一个有趣的错误。我有一组可以通过通用设置器设置的属性。这些属性可以是值类型或引用类型。
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()
装箱值。检查盒装值似乎有点矫枉过正。没有更简单的方法吗?