鉴于以下脚本:
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 在默认情况下枚举它们 - 即集合的元素被一一发送到成功输出流。
[object[]]
),除非只有一个元素,它按原样捕获。 为了防止这种情况 - 即 将集合作为一个整体输出 - 使用:
Write-Output -NoEnumerate $t
更短、更高效但不太明显的替代方案 是将集合包装在一个辅助单元素数组中,使用 ,
的一元形式,数组构造运算符,这会导致 PowerShell 枚举外部数组并在其中输出集合原样:, $t # implicit output, no Write-Output needed
关于powershell - 从函数/脚本返回 ArrayList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50843357/