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 :)
Ändern Sie Projekteigenschaften _Option Strict = ON_ und die Fehlermeldung wird Ihnen die Wahrheit sagen – Steve
der erste "=" ist Affektiert, die anderen sind "Vergleich" und 4 = 5 ergibt 0 zum Beispiel – Gar
es würde laufen als 'a == (b = c): b & c vergleichen, boolesches Ergebnis (false) einem –