見落としがちな不具合
.NET Framework 2.0から追加されたNullable(null許容型)というものがあります。
これは値型のオブジェクトにnullの設定を可能にします。 int型はnullを設定することはできませんが、int?型はnullを設定することが可能です。 Nullableを使ったdecimal型の比較について、見落としそうなプログラムコードが ありましたので忘れないようにメモします。 通常、decimal型の変数と値をやり取りするときは値の後にサフィックス(mもしくはM)を 付けます。decimal d = 3.14M; こんな感じ。 条件文のときでは if( d == 0M) { みたいに使います。 if( d == 0)でも動くのですが、できれば0Mやdecimal.Zeroを使うのがいいと思います。 さて、問題のコードはこちら テストコード
これを実行するとどうなるか?
変数dには0を代入してます。これを0と比べているので"値は0です。"と出力されそうな ものですが、実際動かすと"値は0以外です。"を出力します。 if ( d.Equals(0M))もしくはif ( d.Equals(decimal.Zero)) とすると"値は0です。"と出力されました。 |