我注意到这两个声明之间存在差异,只有逗号的位置发生了变化:
$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
答案 0 :(得分:2)
bool b = new[] { 1, 2, 3, 4 }.Contains(x);
因为 , 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