2

考虑下面的片段

$JobResult = Start-Job -ScriptBlock {
    $Result = @("foo", "bar")
    Write-Host "Returning type $($Result.GetType().Name)"
    $Result
} | Receive-Job -Wait -AutoRemoveJob
Write-Host "Returned type $($JobResult.GetType().Name)"

它按预期打印

Returning type Object[]
Returned type Object[]

但是当返回时需要更复杂的对象时,例如:

$JobResult = Start-Job -ScriptBlock {
    $Result = @{ InnerArray = @("foo", "bar") }
    Write-Host "Returning type $($Result.InnerArray.GetType().Name)"
    $Result
} | Receive-Job -Wait -AutoRemoveJob
Write-Host "Returned type $($JobResult.InnerArray.GetType().Name)"

印刷

Returning type Object[]
Returned type ArrayList

我们在为处理工作的某些功能编写单元测试时偶然发现了这一点,而验证并不满意,因为它有不同的类型。为什么会这样?是否有任何文件为什么?

此外,甚至 PowersHell 的自动数组展开在这里也不一致(至少从我的角度来看)。在第一个片段中,如果数组中只有一个字符串,则结果类型为String. 但在第二个片段中,它 "仍然" ArrayList

经测试PSVersion 5.1.17763.1971

4

0 回答 0