Powershell错误返回哈希表

alp*_*dev 3 powershell return hashtable

任何人都有任何想法为什么以下代码会产生错误,请参阅函数后的其他注释以获取更多详细信息

function callee    ([Hashtable]$arg0) {
    [Hashtable]$hashtable = @{}
    $hashtable = $arg0
    $hashtable.add('passed', $True)
    # $hashtable                            ######## toggle this line
    $type = $hashtable.GetType()
    Write-Host "$type"
    return $hashtable
}

function caller {
    [Hashtable]$hashtable = @{'00'='0'}
    $hashtable = callee $hashtable        ##### returns error here
    $hashtable.add('returned', $True)
    $hashtable
}
caller
Run Code Online (Sandbox Code Playgroud)

错误消息:无法将"System.Object []"类型的"System.Object []"值转换为"System.Collections.Hashtable"类型.

我收到了各种情况的错误,我试图将其缩小到一个易于重现的例子.看起来它正在将哈希表更改为对象数组,这就是为什么它不会返回它?它允许我修改哈希表并返回它但是当我尝试显示它时会改变它吗?这与我开始向被调用者函数添加代码时获得的效果相同?

Sea*_*ett 8

当您取消注释时,# $hashtable您正在从函数中输出两个东西.该函数的结果是它的所有"输出",PowerShell将自动将多个输出包装到一个数组中.return语句是一种短路方便,不应与从函数返回值的唯一方法混淆.

  • 同意.我建议不要在PowerShell中使用成语`return <expr>`,因为它具有误导性.它在功能上等同于`Write-Output <expr>; return`.最好只把`$ hashtable`作为函数的最后一行并调用它(就像*调用*函数那样). (2认同)