数组 – PowerShell从函数返回单个元素数组

今天我注意到PowerShell的一个感兴趣的行为,我做了以下代码来展示它.当你运行:

function test()
{
    $a = @(1,2);
    Write-Host $a.gettype()
    return $a;
}

$b = test
Write-Host $b.gettype();

你得到的是:

System.Object[]
System.Object[]

但是,当您将代码更改为:

function test()
{
    $a = @(1);
    Write-Host $a.gettype()
    return $a;
}

$b = test
Write-Host $b.gettype();

你会得到:

System.Object[]
System.Int32

有人可以提供有关此“功能”的更多详细信息吗?似乎PowerShell规范没有提到这一点.

谢谢.

顺便说一下,我测试了PowerShell版本2,3及其上的代码. 4.

最佳答案
在某些情况下,Powershell会自动“展开”数组,在您的情况下,赋值:

PS> (test).GetType()
System.Object[]

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int32                                    System.ValueType

PS> $b = test
System.Object[]
PS> $b.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int32                                    System.ValueType

您可以通过在赋值中明确引入数组来解决:

$b = ,(test)

转载注明原文:数组 – PowerShell从函数返回单个元素数组 - 代码日志