0

我只是好奇的代码没有问题。我正在查看这段代码,我试图弄清楚为什么它们按位而不是常规的 &&

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。这很可能只是他的编码风格。

4

3 回答 3

2

我可以看到一些选项:

请记住,操作数没有按位运算bool,因此它只是一个逻辑与。

一切都非常个人化,最好的答案将来自真正的开发人员。

于 2014-10-07T16:51:56.920 回答
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); }

...或其他类似形式。这&=使代码缩短了几个字符,但正如您所发现的,主要只是使其更难阅读。

更新:正如评论者指出的那样, &= 不会短路像 && 这样的布尔值,因此仍然调用右侧函数的真正替代方案是:

var temp = IsSPEConfigurationValid(this.m_ThisDevices[BDCSPE], ref el); bValid = bValid && temp

于 2014-10-07T16:52:16.883 回答
0

所以,首先,这里没有使用按位运算符。运算符有&几个重载;它既有数字类型的许多按位重载,但也有布尔值的重载,它执行逻辑与,根本不会短路。

至于为什么代码作者没有使用&&=操作符而不是&=操作符,那是因为没有&&=操作符,只有一个&=操作符。

于 2014-10-07T16:54:32.850 回答