2016-06-14 10 views
3

VB.NETでコーディングしているうちに、私は誤ってこのようなコードを自分のコードに書きました。1 = 2 = 3の場合どうすればいいですか(...)

Dim a as integer = 1 
Dim b as Integer = 2 
Dim c as Integer = 3 
If a = b = c Then 
'.. some Code 
End if 

私には間違いがないので、わからないプログラミング言語(またはプログラミング自体)の一部であるように見えます。

私の質問

この文はどのように機能するの

と、このコードのユースケースのための良い例は何ですか?


編集

Dim a as Integer = 1 = 2 = 3

この行はまた、私にエラーを与えるものではありません。 MsgBox(a)は私に示し0


回答:あなたは質問のコメントでそれを見つけることができます

+4

プロジェクトのプロパティを変更する_Option Strict = ON_とエラーメッセージが表示されます – Steve

+0

最初の「=」は影響あり、その他は「比較」、4 = 5は0を返します。たとえば、 – Gar

+0

は 'a ==(b = c):b&cを比較し、ブール値(false)を –

答えて

13

はい、有効な式であるOption Strict Off(デフォルト)が有効です。そのモードでは、VB.NETはJavascript、Python、Rubyの精神の中で(ほとんど)動的言語のように動作します。コンパイラは、式を有効にするために必要な箇所で変換を行い、文字列、ブール値、数値型の間で簡単に変換します。

式の左から右、つまり(a = b)= cと評価されます。 a = bサブ表現はブール値を生成し、cとの比較を有効にするためにIntegerに変換する必要があります。 Falseは0を生成し、Trueは-1を生成します。 VBがCOMオートメーションに依拠していた時代の一部であり、typo btwではありません。

最後の式の型は、再度ブール型です。 2番目のステートメントでIntegerに変換する必要があることに注意してください。与えられた値を持つa = bは常にFalseを生成するので、0 = cは常にFalseになります。

Option Strictを有効にすると、コンパイラはこれらの自動変換を適用しなくなり、このステートメントでエラーを生成します。ブールサブ式を変換するためにCInt()を使用することを主張します。いつもあなたが表現を不安定にしたことを発見するのに十分なほど良い。

このバイトのような不具合が頻繁に発生する場合は、おそらくデフォルトを変更することを検討するべきです。ツール>オプション>プロジェクトとソリューション> VBデフォルト>オプション厳密設定を使用します。

関連する問題