2

私(VB.NETの初心者)は、「文字列 "False"(または "True")を整数型に変換中にエラーが発生しました」という例外をスローする関数のコードメンテナンスを行っています。私が見つけたのはこれと同等のものでした

someValは文字列であり、someFun1は整数を返し、someFun2は整数をパラメーターとして受け取ります。

...
someVal = someVal = someFun1()
...
someFun2(someVal)
...

起こっていると思うのは、someFun1の戻り値をsomeValに割り当ててから、someValが変更されたかどうかについてブールチェックを実行しようとしていることです。しかし、それを実行する必要はないと思います。

私の質問は-この二重代入(someVal = someVal = someFun1())は、VB.NETで私が知らないことを何でも達成しますか?

別の注意:整数から文字列への暗黙のキャストと整数への戻りがあることを認識していますが、値は常に数値を保持する必要があるため、問題は発生しません(整数と文字列から暗黙的に前後にキャストできます)。 、そうですか?)真でも偽でもない-私が知る限り

4

1 に答える 1

5

ここでの混乱は、equals演算子がVB.NET=の代入演算子と同じであるということです。=C#では、上記のコードは次のようになります

someVal = someVal == someFun1();

ここで、ブール値の等しい演算子==が最初に実行され、結果がに挿入されsomeValます。someValintではなく、であるため、これは失敗しますbool

つまり、ランタイムはsomeVal、の戻り値と比較して、またはをsomeFun1()返し、それを整数にキャストできません。これは「二重割り当て」ではなく、単なるインライン表現です。TrueFalse

If someVal = someFun1() Then
    someVal = True
Else
    someVal = False
End If

Integerここで、変数に型の値を与えようとしていることがはるかに明白ですBoolean

于 2010-07-16T13:31:57.630 に答える