c# foreach循环中检索对象列表的次数是多少?

本文关键字:多少 列表 循环 foreach 检索 对象 | 更新日期: 2023-09-27 18:12:23

我通常尝试在运行foreach循环之前将数组/集合存储为局部变量:而不是在foreach中调用Get函数。这是因为我假设它必须在每次循环迭代时获取该数组,而我宁愿它只需要一次获取数组/集合。我很难找到支持我的理论的文档,所以我想问一下大师。

//Assume that FindStringsContaining() is a CPU
//intensive operation. Does it run only once?
foreach(string data in FindStringsContaining("Data"))
{
    //use the data
}

c# foreach循环中检索对象列表的次数是多少?

永远只运行一次

Foreach操作的对象是一个IEnumerable,并简单地遍历该集合;在循环中为找到的每一项执行代码。

请注意,在枚举期间修改集合(这可能需要重新枚举)是不允许的(将抛出InvalidOperationException)。

方法调用只会发生一次。然后它返回一个以流方式迭代的IEnumerable<string>(在项目保留在集合中或未击中break时调用MoveNext方法)。

调用一次。验证这一点的一个快速方法是在findstringscontains()方法中放置一个断点,您可以看到它只被命中一次。