【问题标题】:Returning ArrayList from Function/Script从函数/脚本返回 ArrayList
【发布时间】:2018-06-13 17:50:46
【问题描述】:

给定以下脚本:

function f {
    [CmdletBinding()]Param()
    Write-Verbose 'f: Start'
    $t = New-Object 'System.Collections.ArrayList'
    Write-Verbose $t.GetType().Name
    return $t
}

$things = New-Object 'System.Collections.ArrayList'
$things.GetType().Name
$things = f -verbose
$things.GetType().Name

为什么$things 不是最后一行的ArrayList

【问题讨论】:

    标签: powershell


    【解决方案1】:

    输出集合(不仅仅是数组)会导致 PowerShell 在默认情况下枚举它们 - 即,集合的元素被一个接一个发送到成功输出流。

    • 如果您通过在变量中捕获输出来收集这些元素,您总是会得到一个常规的 PowerShell 数组 ([object[]]),除非只有 一个 元素按原样捕获。

    为了防止这种情况发生 - 即,输出一个集合作为一个整体 - 使用:

    Write-Output -NoEnumerate $t
    

    一个更短、更高效但不太明显的替代方法是用一元形式,(数组构造运算符)将集合包装在一个辅助单元素数组中,这会导致 PowerShell枚举外部数组并按原样输出集合:

    , $t    # implicit output, no Write-Output needed
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 2017-01-31
      • 1970-01-01
      • 2017-10-02
      • 2017-01-07
      • 1970-01-01
      相关资源
      最近更新 更多