加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

.net – 为什么这段代码甚至可以编译?

发布时间:2020-12-17 00:19:23 所属栏目:大数据 来源:网络整理
导读:题: 为什么下面的代码(不是我写的)甚至编译? 我的意思是除了选项严格关闭和选项推断正在… If Not actdate.DayOfWeek = DayOfWeek.Saturday And Not actdate.DayOfWeek.Sunday Then...End If **编辑:** 对于那些不熟悉VB的人来说,它显然与以下相同: if (
题:
为什么下面的代码(不是我写的)甚至编译?
我的意思是除了选项严格关闭和选项推断正在…
If Not actdate.DayOfWeek = DayOfWeek.Saturday And Not actdate.DayOfWeek.Sunday Then
...
End If

**编辑:**
对于那些不熟悉VB的人来说,它显然与以下相同:

if (!(actdate.DayOfWeek == DayOfWeek.Saturday) & !actdate.DayOfWeek.Sunday) {
...
}

这基本上已经回答了这个问题,因为要记住的事情是VB-`AND`实际上是一个按位而且.

接受的答案是不正确的,VB.NET中的运算符优先级确保使用And运算符的逻辑版本,与AndAlso相同.由于使用了Not运算符,左侧和右侧操作数都是Boolean类型. VB.NET中的优先级是关系>不是>和.在C#中它是! >关系> &放;.换句话说,你不需要像在C#中那样在VB.NET中使用括号.

Visual Basic中的Not运算符接受布尔或数字表达式.就像在C#中一样,枚举值可以隐式转换为与Enum的基本类型匹配的整数值类型.在这种情况下整数.数值0将转换为False.由于DayOfWeek.Sunday的基础值为0,因此Not表达式始终生成True.

所以这是可以接受的语法.但是,您会收到此代码的警告,这与您在C#中获得的错误非常相似:

warning BC42025: Access of shared member,constant member,enum member or nested type through an instance; qualifying expression will not be evaluated.

由actdate.DayOfWeek属性表达式中使用的Sunday枚举成员生成.那肯定是代码味道.如果不忽略警告,您可以将该警告变为错误.项目属性,编译选项卡,警告配置部分.将“实例变量访问共享成员”设置从“警告”更改为“错误”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读