一个答案和后续debate in the comments在另一个线程中提示我问:
在 C# 中 ||和 && 是逻辑运算符 | 的短路版本和 & 分别。
示例用法:
if (String.IsNullOrEmpty(text1) | String.IsNullOrEmpty(text2) | String.IsNullOrEmpty(text3))
{
//...
}
对比:
if (String.IsNullOrEmpty(text1) || String.IsNullOrEmpty(text2) || String.IsNullOrEmpty(text3))
{
//...
}
就编码实践而言,哪个更好用,为什么?
注意:我确实意识到这个问题类似于 this question但我相信它值得针对特定语言进行讨论。
最佳答案
In terms of coding practice which is the better to use and why?
简单的答案:始终使用短路版本。根本没有理由不这样做。此外,您还可以让您的代码更清晰,因为您表达了您的意图:逻辑评估。使用按位(逻辑)运算意味着您只需要:位运算,而不是逻辑求值(尽管 MSDN 在应用于 bool 值时也称它们为“逻辑运算符”)。
此外,由于短路只评估需要评估的内容,因此它通常更快,并且允许编写这样的代码
bool nullorempty = str == null || str.Length == 0;
(请注意,为了解决这个特定问题,已经存在一个更好的函数,即 string.IsNullOrEmpty
,您也在问题中使用了它。)按位逻辑运算无法使用此代码,因为即使 str
为 null
,第二个表达式也会被计算,从而导致 NullReferenceException
。
编辑:如果您希望在逻辑上下文中出现副作用,请仍然不要使用按位运算。这是太聪明的典型例子。代码的下一位维护者(甚至是你自己,几周后)看到这段代码时不会想“嗯,这段代码可以清理一下以使用条件运算符”,从而无意中破坏代码。我很同情负责修复这个错误的人。
相反,如果您必须依赖副作用,请将它们显式化:
bool hasBuzzed = checkMakeBuzz();
bool isFrobbed = checkMakeFrob();
bool result = hasBuzzed || isFrobbed;
当然,三行而不是一行。但结果是代码更清晰。
关于c# - 关于 C# 短路评估的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/361069/