見落としがちな不具合[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です。"と出力されました。
C#によるマルチコアのための非同期 並列処理プログラミング 山本 康彦 ¥ 2,919 〔速攻入門〕 C#プログラミング すぐに現場で使える知識 [単行本(ソフトカバー)] 中 博俊 ¥ 2,814
Copyright (C) 2011 - 2017 猫の気ままなC#日記

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