gpt4 book ai didi

c# - 关于 C# 短路评估的最佳实践是什么?

转载 作者:可可西里 更新时间:2023-11-01 03:03:30 29 4
gpt4 key购买 nike

一个答案和后续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,您也在问题中使用了它。)按位逻辑运算无法使用此代码,因为即使 strnull,第二个表达式也会被计算,从而导致 NullReferenceException

编辑:如果您希望在逻辑上下文中出现副作用,请仍然不要使用按位运算。这是太聪明的典型例子。代码的下一位维护者(甚至是你自己,几周后)看到这段代码时不会想“嗯,这段代码可以清理一下以使用条件运算符”,从而无意中破坏代码。我很同情负责修复这个错误的人。

相反,如果您必须依赖副作用,请将它们显式化:

bool hasBuzzed = checkMakeBuzz();
bool isFrobbed = checkMakeFrob();
bool result = hasBuzzed || isFrobbed;

当然,三行而不是一行。但结果是代码更清晰。

关于c# - 关于 C# 短路评估的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/361069/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com