2009年3月29日日曜日

.NET Boolean 型が数値型に正確に変換されない

Boolean型の値を数値型に変換する場合、CintとConvert.ToInt32で結果が異なります。
CintではTrueは-1、Falseは0に変換されます。
Convert.ToInt32ではTrueは1、Falseは0に変換されます。

MSDN:データ型のトラブルシューティングから引用

ブール型 (Boolean) (Visual Basic) 値は数字としては格納されず、格納された値は数字と等しくなりません。以前のバージョンとの互換性維持のため、Visual Basic には、Boolean 型と数値型を相互に変換するための変換用のキーワード (CType 関数、CBool、CInt など) が用意されています。ただし、他の言語では、この変換が別の方法で実行されることもあります。たとえば、.NET Framework のメソッドがそうです。

コードを作成する際、True および False に相当する数値を利用しないようにしてください。ブール型 (Boolean) の変数に対しては、できるだけ本来の論理値だけを使用してください。ブール型 (Boolean) と数値を混在させる必要がある場合は、選択した変換メソッドを十分理解してから行ってください。

Visual Basic における変換
変換用の CType キーワードまたは CBool キーワードを使って数値型を Boolean 型に変換すると、0 は False になり、それ以外のすべての値は True になります。変換用のキーワードを使って Boolean 値を数値型に変換すると、False は 0 になり、True は -1 になります。

フレームワークにおける変換
System 名前空間にある Convert クラスの ToInt32 メソッドを使うと、True は +1 に変換されます。

Boolean 値を数値データ型に変換する必要がある場合は、使用する変換メソッドに注意してください。

0 件のコメント: