【发布时间】:2018-03-07 02:47:38
【问题描述】:
为什么下面不遍历ConvertFrom-Json返回的System.object[]数组的元素:
ConvertFrom-Json '[1, 2, 3]' | ForEach-Object {": $_"}
但确实如此:
(ConvertFrom-Json '[1, 2, 3]') | ForEach-Object {": $_"}
在我看来,在第一种情况下,整个数组作为参数传递给ForEach,但我不清楚原因。
【问题讨论】:
-
确实,这很有趣puu.sh/ump6h/bb33b203fc.png
-
好的,
$conv = ConvertFrom-Json '[1, 2, 3]'; $conv | ForEach {$_.gettype()}按预期工作。为什么数组在变量赋值期间被解包,但在管道时却没有?这对我来说没有多大意义。 -
比较
&{,@(1,2,3)}|% "$_"v&{@(1,2,3)}|% "$_" -
@deorst 错误,您指出的实际上是
ConvertTo-Json中的“错误”,而不是ConvertFrom-Json中的“错误”。此外,您看到的行为尤其与ConvertFrom-Json无关。至少在我看来,PowerShell 的行为完全符合预期。function f {,(1..5)}; f | % GetType; (f) | % GetType
标签: powershell