気になった事を自由に書いてます。
      
見落としがちな不具合
.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です。"と出力されました。
      






Copyright (C) 2011 - 2017 猫の気ままなC#日記