我有以下循环结构:
while ($reader.Read() -eq $true)
{
$row = @{}
for ($i = 0; $i -lt $reader.FieldCount; $i++)
{
if(something...)
{
#continue with while
}
}
#do more stuff...
}
现在,有没有办法在for
循环内继续使用外部while
循环的下一次迭代而没有任何中断变量?因此,如果“某事是真的”我不想去#do more stuff
而是去做下一个$reader.read()
。 Continue
仅进入for
循环的下一次迭代。 Break
只会破坏for
循环。
答案 0 :(得分:7)
将内循环分解为函数可以提高可读性,具体取决于变量的混乱程度。
function processRow($reader) {
$row = @{}
for ($i = 0; $i -lt $reader.FieldCount; $i++)
{
if(-not something...) { return $null }
# process row
}
$row
}
while ($reader.Read()) {
$row = processRow $reader
if ($row) {
#do more stuff...
}
}
但如果您想直接执行此操作,则可以,因为PowerShell标记了中断:
:nextRow while ($reader.Read()) {
$row = @{}
for ($i = 0; $i -lt $reader.FieldCount; $i++) {
if(something...) {
#continue with while
continue nextRow
}
}
#do more stuff...
}
答案 1 :(得分:0)
编辑:修改后的,递归的(和未经测试的!)解决方案,以便您的耕作可能会有所不同:
function doReader()
{
while ($reader.Read() -eq $true)
{
$row = @{}
for ($i = 0; $i -lt $reader.FieldCount; $i++)
{
if(something...)
{
#continue with while
doReader
break;
}
}
}
}
doReader
#do more stuff