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)

它告诉你它是一个对象,因为技术上它是。

PS C:UsersAdministrator> $arr = @(1,2,3,4,5)
PS C:UsersAdministrator> $arr.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

请注意, BaseTypeSystem.Array

但是当你使用Write-Host输出时,它只是告诉你它是一个System.Object[]

PS C:UsersAdministrator> Write-Host $arr.GetType()
System.Object[]

像那样。

所以我们可以根据上面的表格运行以下命令来找出BaseType

PS C:UsersAdministrator> Write-Host $arr.GetType().BaseType
System.Array
链接地址: http://www.djcxy.com/p/18287.html

上一篇: PowerShell return a single element array from function

下一篇: urlencoded binding to different property names