コメントに付けようと思ってたら、先に指摘されたっす。
元ネタ(う、マッチポンプ)
【VB Love】比較と代入……、イジめんなエラい人^^;
こくぶんさん>
Dim i = -1
Dim j = -1.0
にすると、
Console.WriteLine((i = j) = j)
がTrueになりますね。 ^^;;
ILで動きを追ってみたんですが、どうやらVBだと比較結果を-1[True]/0[False]で返すみたいです。(C#は1[True]/0[False])
……昔のVBの名残か何かでしょうか?
や、やられた^^; おもいっきり先を越されたorz
【VB6】
Dim bTest As Boolean
bTest = True
Debug.Print bTest & ":" & CInt(bTest)
bTest = False
Debug.Print (bTest) & ":" & CInt(bTest)
【結果】
True:-1
False:0
で、ネタばらしですが、VBは互換性保持のためTrueは-1です。CTypeも-1です。でも.NET FrameworkのConvert.ToInt32は+1を返すんですねぇ
。面妖ですねぇ。ますます理解し合えて愛が深まりますねぇ。
【VB9】
Dim bTest = True
Console.WriteLine(CType(bTest, Int32))
Console.WriteLine(Convert.ToInt32(bTest))
【結果】
-1
1
ということで、Booleanの数値化はやっちゃダメリストに挙がってます
「Visual Basic のプログラミング ガイド データ型のトラブルシューティング」
http://msdn.microsoft.com/ja-jp/library/ae382yt8.aspx