多维数组初始化似乎对空白敏感

时间:2016-06-09 09:17:04

标签: powershell declaration

我注意到这两个声明之间存在差异,只有逗号的位置发生了变化:

$a = @( @('a','b'),
        @('c','d'))

$b = @( @('a','b')
      , @('c','d'))

在这种情况下,$a.length评估为2,$b.length评估为3. $b的第一个子数组已展平。

这是一项功能,我在哪里可以找到它的文档?

顺便说一句,$PSVersionTable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.42000
BuildVersion                   6.3.9600.16406
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

1 个答案:

答案 0 :(得分:2)

bool b = new[] { 1, 2, 3, 4 }.Contains(x);

Source.

因为 , Comma operator As a binary operator, the comma creates an array. As a unary operator, the comma creates an array with one member. Place the comma before the member. 会将两个字符串@('a','b')a推送到数组b,而您强制$b被推入@('c','d')使用逗号作为$b

示例:

array

输出:

$b = @( @('a','b')
      , @('c','d'))

$b | foreach { Write-Host "Item: $_"}

如果你看一下类型:

Item: a
Item: b
Item: c d

你得到:

$b | foreach { $_.GetType()}

要强制IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True String System.Object True True String System.Object True True Object[] System.Array 包含两个$b,请使用逗号二进制运算符:

arrays