Die akzeptierte Antwort ist nicht korrekt, Operatorenpräzedenz in VB.NET stellt sicher, dass die logische Version von And-Operator verwendet wird, dieselbe wie AndAlso. Sowohl der linke als auch der rechte Operand sind vom Typ Boolean, da die Not-Operatoren verwendet werden. Vorrang in VB.NET ist relational> Not> Und. In C# ist es! > relational> &. Oder anders gesagt, Sie benötigen in VB.NET keine Klammern wie in C#.
Der Not-Operator in Visual Basic akzeptiert einen booleschen oder numerischen Ausdruck. Genau wie in C# ist ein Enum-Wert implizit in einen ganzzahligen Werttyp konvertierbar, der dem Basistyp der Enum entspricht. Ganzzahl in diesem Fall. Ein numerischer Wert von 0 wird in False konvertiert. Da der DayOfWeek.Sunday-Wert 0 ist, erzeugt der Not-Ausdruck immer True.
Das ist also eine akzeptable Syntax. Sie erhalten jedoch eine Warnung für diesen Code, sehr ähnlich den Fehler, den Sie in C# erhalten:
Warnung BC42025: Zugriff gemeinsamen Mitglied, ständigen Mitglied, Aufzählungsmember oder verschachtelter Art über eine Instanz; qualifizierende Ausdrücke werden nicht ausgewertet.
Produziert von dem Sunday-Enum-Member, das im actdate.DayOfWeek-Property-Ausdruck verwendet wird. Das ist sicherlich ein Code-Geruch. Wenn Sie Warnungen nicht ignorieren, können Sie diese Warnung in einen Fehler umwandeln. Projekt + Eigenschaften, Registerkarte Kompilieren, Abschnitt Warnkonfiguration. Ändern Sie die Einstellung "Instanzvariable greift auf freigegebenes Element zu" von "Warnung" auf "Fehler".
Das ist der Unterschied zwischen logischem und bitweisem Betrieb. http://msdn.microsoft.com/en-us/library/wz3k228a.aspx –
Warum dann 'If 1 = 1 Und" hi "Dann ...' auch kompilieren? Es gibt Ihnen eine Laufzeitausnahme, kompiliert aber trotzdem. – Khan
@ JefferyKhan: Wahrscheinlich weil 'Option Strict' ausgeschaltet ist. – SLaks