Принимаемый ответ неверен, приоритет оператора в VB.NET гарантирует, что используется логическая версия оператора And, такая же, как AndAlso. Как левый, так и правый операнды имеют тип Boolean благодаря используемым операторам Not. Приоритет в VB.NET является реляционным> Not> And. В C# это! > реляционные> &. Или, говоря иначе, вам не нужны скобки в VB.NET, как в C#.
Оператор Not в Visual Basic принимает логическое или числовое выражение. Как и в C#, значение перечисления неявно преобразуется в тип целочисленного значения, который соответствует базовому типу Enum. Целое число в этом случае. Числовое значение 0 преобразуется в значение False. Поскольку базовое значение DayOfWeek.Sunday равно 0, выражение Not всегда производит True.
Так что это приемлемый синтаксис. Тем не менее, вы получаете предупреждение для этого кода, очень похожее на ошибку, которую вы получаете на C#:
предупреждение BC42025: доступ к совместно используемому члену, постоянному члену, члену перечисления или вложенному типу через экземпляр; квалификационное выражение не будет оцениваться.
Произведено членом воскресного перечисления, используемым в выражении actdate.DayOfWeek. Это, безусловно, запах кода. Если не игнорировать предупреждения, вы можете превратить это предупреждение в сообщение об ошибке. Project + Properties, вкладка Compile, раздел Конфигурация предупреждений. Измените параметр «Переменная экземпляра доступа к общему члену» от «Предупреждение до ошибки».
В этом разница между логической и побитовой операцией. http://msdn.microsoft.com/en-us/library/wz3k228a.aspx –
Тогда почему 'If 1 = 1 И" hi "Then ...' также компилируется? Это даст вам исключение во время выполнения, но все еще компилируется. – Khan
@JefferyKhan: Возможно, потому что 'Option Strict' выключен. – SLaks