PowerShell DataTable 删除空列逻辑不正确

PowerShell DataTable removing empty columns logic incorrect

这是我第一次编写可以调用自身的函数。我正在尝试删除行为空的 DataTable 的所有列。

代码工作正常,但出现一些错误。由于某种原因,它最后一次循环 for 循环,旧的 $Columns 数字仍在内存中。虽然我每次调用函数的时候都在重新填充...我不明白为什么..

代码:

 Function Remove-EmptyColumns {
    $Columns = $DataTable.Columns.Count
    $Rows    = $DataTable.Rows.Count

    for ($c = 0; $c -lt $Columns; $c++) {    
        $Empty = 0       
        for ($r = 0; $r -lt $Rows; $r++) {
            if ($DataTable.Rows[$r].Item($c).ToString() -eq '') {
                $Empty++
            }
        }
        if ($Empty -eq $Rows) {
            $DataTable.Columns.Remove($DataTable.Columns[$c])
            Remove-EmptyColumns
        }
    }
}

感谢您的帮助。

为什么是递归方法?尝试删除 Remove-EmptyColumns,它应该可以工作,不是吗?

编辑:尝试

Function Remove-EmptyColumns {
    $Columns = $DataTable.Columns.Count
    $Rows    = $DataTable.Rows.Count

    $columnsToRemove = @()

    for ($c = 0; $c -lt $Columns; $c++) {    
        $Empty = 0       
        for ($r = 0; $r -lt $Rows; $r++) {
            if ($DataTable.Rows[$r].Item($c).ToString() -eq '') {
                $Empty++
            }
        }
        if ($Empty -eq $Rows) {
            $columnsToRemove.Add($DataTable.Columns[$c])
        }
    }

    $columnsToRemove | ForEach-Object { 
            $DataTable.Columns.Remove($_) }
}

只是一个想法,但我喜欢使用 IsNullOrEmpty 的 String 静态方法。

if ([string]::IsNullOrEmpty($DataTable.Rows[$r].Item($c).ToString()))
{ ... }

这消除了值可能不等于 '' 而是 $Null 的问题,并且它在一行中完成。