我注意到在脚本块中使用数组的奇怪行为。以下代码显示了问题:
$array = @("x", "y")
Write-Host "$($array.GetType().Name)"
Write-Host "$($array.GetType().BaseType)"
$bad = {
$array += "z"
Write-Host "$($array.GetType().Name)"
Write-Host "$($array.GetType().BaseType)"
$array
}
$good = {
$array = $array.Clone()
$array += "z"
Write-Host "$($array.GetType().Name)"
Write-Host "$($array.GetType().BaseType)"
$array
}
& $good
& $bad
执行脚本将产生以下输出:
Object[]
array
Object[]
array
x
y
z
String
System.Object
z
脚本块$bad
不像我预期的那样工作。它将数组转换为字符串,但它应该简单地将元素添加z
到数组中。如果没有添加元素,则可以按预期使用数组。
我在 powershell 5.0 和 5.1 中注意到了这种行为,但在 ISE 中没有。这是一个错误还是任何人都可以解释这个?