在Powershell中传递引用类型参数

时间:2015-04-15 08:48:08

标签: powershell

 function test1{
     param([System.Collections.ArrayList]$x
     )
     $x.Add("Test1Add")
     write "in Test1 $x"
 }
$x=New-Object System.Collections.ArrayList

这是我的代码,在运行test1之后,Result将是:

PS C:\Windows> test1 $x
0
in Test1 Test1Add

PS C:\Windows> $x
Test1Add

我想知道为什么会发生这种情况,我想在调用test1时,就像将一个Reference类型的指针传递给test1一样,就像C#或其他语言一样?值类型如int,我必须使用$ script:x来更改gloabl范围中的x。提前致谢

1 个答案:

答案 0 :(得分:0)

使用Reference variables

  $x=New-Object System.Collections.ArrayList
  function test( [ref][System.Collections.ArrayList]$x) { $x.value.Add($(get-random)) }
  test ([ref]$x)
  test ([ref]$x)
  $x

修改

我误解了这个问题,你想要反其道而行之。结果与上述情况相同,但不适用于值类型。如果您希望上述函数不更改引用的对象,则需要在函数内克隆它。可能有Clone函数,但在某些情况下,您必须手动创建克隆。在这种情况下,有这样的方法,因此您可以在上述函数的开头添加$x=$x.Clone()以获得所需的结果。

Value types作为值传递,其他内容作为参考传递。检查var是否为ValueType的最简单方法是执行$var.GetType().IsValueType