Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 从嵌套for循环开始时继续_Loops_Powershell - Fatal编程技术网

Loops 从嵌套for循环开始时继续

Loops 从嵌套for循环开始时继续,loops,powershell,Loops,Powershell,我有以下循环结构: while ($reader.Read() -eq $true) { $row = @{} for ($i = 0; $i -lt $reader.FieldCount; $i++) { if(something...) { #continue with while } } #do more stuff... } 现在,是否有任何方法可以从fo

我有以下循环结构:

while ($reader.Read() -eq $true)
{
    $row = @{}
    for ($i = 0; $i -lt $reader.FieldCount; $i++)
    {
        if(something...)
        {
            #continue with while
        }
    }
    #do more stuff...          
}

现在,是否有任何方法可以从
for
循环内部继续执行外部
的下一次迭代,而
循环没有任何中断变量?因此,如果“某事是真的”,我不想做更多的事情,而是做下一个
$reader.read()
<代码>继续
仅进入
for
循环的下一次迭代<代码>中断
只会中断循环的

编辑:一种经过修订的递归(未经测试!)解决方案,因此您的里程可能会有所不同:

函数doReader()
{
而($reader.Read()-eq$true)
{
$row=@{}
对于($i=0;$i-lt$reader.FieldCount;$i++)
{
如果(某事…)
{
#继续
多雷德
打破
}
}
}
}
多雷德
#多做事

根据变量的混乱程度,将内部循环分解为函数可以提高可读性

函数processRow($reader){
$row=@{}
对于($i=0;$i-lt$reader.FieldCount;$i++)
{
if(-notsomething…{return$null}
#进程行
}
美元行
}
而($reader.Read()){
$row=processRow$reader
如果($行){
#做更多的事情。。。
}
}
但如果您想直接执行此操作,您可以,因为PowerShell已标记为“中断”:

:nextRow while($reader.Read()){
$row=@{}
对于($i=0;$i-lt$reader.FieldCount;$i++){
如果(某事…){
#继续
下一步继续
}
}
#做更多的事情。。。
}

是的,我说的“额外中断变量”就是这个意思。我目前正在使用它,但正在寻找更好的方法;)@沉默,给编辑过的答案一次机会。递归当然更优雅我不会在脚本语言中使用递归,因为我不希望我未来的维护人员理解它——我这么说是出于对我未来维护人员的喜爱。谢谢,这些带标签的中断似乎起到了作用——尽管感觉有点像是好的旧的转到:)带标签的中断就是Donald Knuth所说的“结构化的
GOTO
”——您不能将执行转移到任意位置,只能转移到定义良好的位置(即循环的末端)。为了加强这一点,PowerShell甚至没有一个
GOTO
语句,这对于脚本语言来说是相当罕见的。只需一个小编辑:它是
继续下一步
不中断:下一步你完全正确--
中断:下一步
将从
的内部终止外部循环,这不是我们想要的(在这种情况下,但它也很有用)。对于我来说,
continue nextRow
只在没有
的情况下工作:它将继续for循环