代码没有问题我只是好奇。我有这个代码我正在看,我正在试图弄清楚为什么他们做按位而不仅仅是常规&安培;&安培;
bool bValid = true;
.... // some code here
bValid &= IsASMConfigurationValid(this.m_ThisDevices[BDCASM], ref el);
.... // more code here
bValid &= IsSPEConfigurationValid(this.m_ThisDevices[BDCSPE], ref el);
我只是想知道为什么这样做而不只是将bValid =设置为IsConfigValid。这很可能只是他的编码风格。
答案 0 :(得分:2)
我可以看到一些选项:
&=
来避免再次写它。请记住,bool
操作数没有按位操作,所以它只是一个逻辑AND。
一切都非常个人化,最好的答案将来自真正的开发者。
答案 1 :(得分:2)
让我们看看这一行:
bValid &= IsSPEConfigurationValid(this.m_ThisDevices[BDCSPE], ref el);
这可以改写为:
bValid = bValid && IsSPEConfigurationValid(this.m_ThisDevices[BDCSPE], ref el);
或
if(bValid) {
bValid = IsSPEConfigurationValid(this.m_ThisDevices[BDCSPE], ref el);
}
......或其他类似形式。 &=
会使代码缩短几个字符,但是,正如您所发现的那样,主要是让代码更难阅读。
更新:正如评论者所指出的那样,& =并没有像&&amp ;;这样的bool短路。这样做仍然调用右边函数的真正替代方案是:
var temp = IsSPEConfigurationValid(this.m_ThisDevices[BDCSPE], ref el);
bValid = bValid && temp
答案 2 :(得分:0)
所以,首先,这里没有使用按位运算符。 &
运算符有几个重载;它对数值类型都有许多按位重载,但它也有一个布尔值的重载,它执行逻辑并且不会发生短路。
至于为什么代码作者没有使用&&=
运算符而不是&=
运算符,那将是,因为没有&&=
运算符,只有&=
运算符。