我通常尝试在运行 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
}
Run Code Online (Sandbox Code Playgroud)
它总是只运行一次。
Foreach 对 进行操作IEnumerable,并且简单地迭代集合;为它找到的每个项目执行循环内的代码。
请注意,在枚举期间修改集合(这可能需要重新枚举)是明确不允许的(InvalidOperationException将抛出异常)。