見落としがちな不具合[2013/06/18] - 猫の気ままなC#日記

このサイトについて |サイトマップ |お問い合わせ
気になった事を自由に書いてます。
見落としがちな不具合 .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を使うのがいいと思います。 さて、問題のコードはこちら テストコード
1 2 3 4 5 6 7 8 9 decimal? d = 0; if ( d.Equals(0)) { Console.WriteLine("値は0です。"); } else { Console.WriteLine("値は0以外です。"); }
これを実行するとどうなるか? 変数dには0を代入してます。これを0と比べているので"値は0です。"と出力されそうな ものですが、実際動かすと"値は0以外です。"を出力します。 if ( d.Equals(0M))もしくはif ( d.Equals(decimal.Zero)) とすると"値は0です。"と出力されました。
プロフェッショナルマスターVisual C# 2012 川俣 晶 ¥ 2,730 Effective C# 4.0 ビル・ワグナー ¥ 3,780
Copyright (C) 2011 - 2017 猫の気ままなC#日記

Từ khóa » C# 0 Vs 0m