2

我试图创建一个自定义对象数组 ( pscustomobject),现在我尝试使用 for 循环更改不同自定义对象的一些值。但这似乎不起作用。这是我尝试过的:

$obj = @([pscustomobject]@{value=0;type="D";used=$false})
$arr1 = @($obj) * 10

for($v = 0; $v -lt 4; $v++){
 $arr1[$v].value = ($v+1)
 $arr1[$v].type ="bubble"
}

结果是:

                        value type                                                   used
                    ----- ----                                                   ----
                        4 bubble                                                False
                        4 bubble                                                False
                        4 bubble                                                False
                        4 bubble                                                False
                        4 bubble                                                False
                        4 bubble                                                False
                        4 bubble                                                False
                        4 bubble                                                False
                        4 bubble                                                False
                        4 bubble                                                False

但我预计结果将是:

                        value type                                                   used
                    ----- ----                                                   ----
                        1 bubble                                                False
                        2 bubble                                                False
                        3 bubble                                                False
                        4 bubble                                                False
                        4 D                                                     False
                        4 D                                                     False
                        4 D                                                     False
                        4 D                                                     False
                        4 D                                                     False
                        4 D                                                     False

这只是一个片段,我只是在尝试一些东西。但我有点恼火,我不明白......对不起,我认为这是一个简单的想法,但看不出有什么问题......我仍然是一个 PS 菜鸟......:-/

编辑:使用PSv3,但我认为没关系......

4

1 回答 1

3

这个:

$arr1 = @($obj) * 10

没有创建 10 个新对象。它创建了 10 个对同一对象的引用。

如果您这样做,请注意区别:

$arr1 = 1..10 |% {[pscustomobject]@{value=0;type="D";used=$false}}

for($v = 0; $v -lt 4; $v++){
 $arr1[$v].value = ($v+1)
 $arr1[$v].type ="bubble"
}
$arr1

                                       value type                                                                                 used
                                       ----- ----                                                                                 ----
                                           1 bubble                                                                              False
                                           2 bubble                                                                              False
                                           3 bubble                                                                              False
                                           4 bubble                                                                              False
                                           0 D                                                                                   False
                                           0 D                                                                                   False
                                           0 D                                                                                   False
                                           0 D                                                                                   False
                                           0 D                                                                                   False
                                           0 D                                                                                   False
于 2014-12-05T14:48:44.383 回答