2016-06-14 10 views
3

Beim Schreiben in VB.NET habe ich versehentlich so etwas in meinen Code geschrieben;Wie geht das, wenn 1 = 2 = 3 Dann (...) arbeiten

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

Es hat mich nicht einen Fehler, so dass es aussieht wie es ein Teil der Programmiersprache ist (oder sich selbst programmieren), die ich nicht kenne.

Meine Frage:

Wie funktioniert diese Aussage Arbeit und was sind gute Beispiele für einen Anwendungsfall dieses Codes?


bearbeiten:

Dim a as Integer = 1 = 2 = 3

Diese Linie gibt mir auch keinen Fehler. MsgBox(a) zeigt mir ein 0


Die Antwort:

Sie es in den Fragen, Kommentare zu finden.

+4

Ändern Sie Projekteigenschaften _Option Strict = ON_ und die Fehlermeldung wird Ihnen die Wahrheit sagen – Steve

+0

der erste "=" ist Affektiert, die anderen sind "Vergleich" und 4 = 5 ergibt 0 zum Beispiel – Gar

+0

es würde laufen als 'a == (b = c): b & c vergleichen, boolesches Ergebnis (false) einem –

Antwort

13

Ja, mit Option Strict Off in Kraft (der Standardwert), das ist ein gültiger Ausdruck. In diesem Modus verhält sich VB.NET (fast) wie eine dynamische Sprache im Sinne von Javascript, Python oder Ruby. Der Compiler gibt Konvertierungen aus, um den Ausdruck gültig zu machen und zwischen Strings, Booleschen und numerischen Typen zu konvertieren.

Der Ausdruck wird von links nach rechts ausgewertet, mit anderen Worten (a = b) = c. Der Unterausdruck a = b erzeugt Boolean, er muss in Integer konvertiert werden, damit der Vergleich mit c gültig ist. Falsch erzeugt 0, Wahr erzeugt -1. Kein Tippfehler, Teil des Vermächtnisses, als VB immer noch stark auf COM-Automatisierung basierte.

Der endgültige Ausdruckstyp ist wieder boolesch. Beachten Sie, dass Ihre zweite Anweisung erfordert, dass sie in Integer konvertiert wird. Da a = b mit den gegebenen Werten immer False ergibt, ist 0 = c immer False.

Mit Option Strict On in der Tat wendet der Compiler diese automatischen Konvertierungen nicht mehr an und generiert einen Fehler in dieser Anweisung. Es besteht darauf, dass Sie CInt() verwenden, um den booleschen Unterausdruck zu konvertieren. Immer wieder gut genug zu entdecken, dass du den Ausdruck fummelt hast.

Sie sollten wahrscheinlich die Standardeinstellung ändern, wenn Missgeschicke häufig dieses Byte mögen. Verwenden Sie Extras> Optionen> Projekte und Lösungen> VB-Standardeinstellungen> Option Strikte Einstellung. Passen Sie auf, dass es schwierig ist, jemals zurück zu schalten :)

Verwandte Themen