今日、私は自分が書いた興味深いバグに出くわしました。一般的なセッターで設定できるプロパティのセットがあります。これらのプロパティは、値型または参照型にすることができます。
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()
、ボックス化された値のみを要求することです。ボックス化された値のチェックを行うのは少しやり過ぎのようです。もっと簡単な方法はありませんか?