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
请注意, BaseType是System.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