gpt4 book ai didi

c# - 在具有多个条件的单个 IF 语句中出现的顺序是否重要

转载 作者:太空宇宙 更新时间:2023-11-03 17:41:35 25 4
gpt4 key购买 nike

我有一个集合,其中最多 19,000 个条目,我在 foreach 语句中对其进行迭代。在 foreach 的开头,我检查一个字符串是否包含 2 个单词中的 1 个和一个 bool 值,然后我继续或执行更多操作。

        foreach (SvnStatusEventArgs e in results) //results being my Collection
{
if ((e.Path.Contains("bin") ||
e.Path.Contains("obj")) && !includeBinObjFolders)
continue;

//Do a bunch of things
}

我不确定计算机是否会检查字符串中的“bin”或“obj”,然后检查 bool 值,也许它会意识到字符串包含这两个之一并不重要 '关键词”。

基本上我想我的意思是下面的运行时间会不同吗?

        foreach (SvnStatusEventArgs e in results) //results being my Collection
{
if (!includeBinObjFolders &&
(e.Path.Contains("bin") ||
e.Path.Contains("obj")
)
)
continue;

//Do a bunch of things
}

出于某种原因,我听到脑后有一个声音告诉我它首先计算最右边的表达式,然后向左计算。如果是这样,第一个应该更有效率吧?我没有一种简单的方法来测试大于 ~200 个文件的集合,所以简单地使用计时器会产生非常接近的结果,我无法确认是否有一种方法更好。

坦率地说,我认为最终用户极不可能在这个集合中最多遇到超过 500 条数据,但理论上它可能是由于用户错误而发生的。

编辑 谢谢大家。我在发帖之前尝试四处搜索,但我忘记了逻辑方面的术语“短路”,所以我很难找到与我冗长的标题相关的答案。

编辑 2 事实上,我刚刚创建了一个小型控制台应用程序,其中有一个 2 个 for 循环,每个循环迭代 20,000 次。一个首先测试了 Contains,另一个首先测试了 Bool。重复这两个循环 10 次,看起来 bool 值第一次平均每 20K 次迭代花费半毫秒。首先评估的 Contains 每 20K 次迭代大约需要 3 毫秒。确实有一点不同!

最佳答案

给定的 bool 表达式将从左到右计算,而不是从右到左。确实定义了顺序;它不是任意的,也不能优化。它总是从左到右。

规范中特别提到了这一点,以便每个表达式的副作用始终按定义的顺序执行。

如果需要,您可以将 bool 变量移到前面作为优化。这可能不是一个巨大的优化,所以不要太担心,但它是一个优化。 (当然,除非您知道它总是或几乎总是解析为 true 而另一个表达式将解析为 false。)

关于c# - 在具有多个条件的单个 IF 语句中出现的顺序是否重要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19389669/

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