2016-09-06 85 views
1

我在函数中有一个数组对象变量[ref] $InsertColHeadName = @(),然后调用另一个函数param ([ref] $InsertColHeadName)。在被调用的函数中,我尝试引用我在参数([ref] $InsertColHeadName) += expression中设置的参数。该表达式返回一个字符串。我在该行中放置了一个断点,并尝试强制使用单引号的字符串,例如:([ref] $InsertColHeadName) += 'xyz';设置通过引用传递的数组变量

我试着用google搜索,但似乎找不到合适的解决方案。

我收到以下错误:

Method invocation failed because [System.Management.Automation.PSReference`1 
[[System.Management.Automation.PSReference`1 
[[System.Management.Automation.PSReference`1 
[[System.Object[], mscorlib, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089]], System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]], System.Management.Automation, 
Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]] does not 
contain a method named 'op_Addition'. 
At line:1 char:1 
+ ([ref] $InsertColHeadName) += 'DepartmentNo'; 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (op_Addition:String) [], RuntimeException 
    + FullyQualifiedErrorId : MethodNotFound
+0

为什么你首先使用'[ref] $ arr = @()'而不是'$ arr = @()'? –

+0

在我在主函数中使用它之前,它不需要参考。由于主函数使用特定的逻辑几次,它是相同的,有一些验证逻辑,我认为将它推到一个函数并调用函数会更好。我试图引用的变量用于另一个可能需要该变量的函数调用。 –

回答

0

还是不清楚如何与阵列设置为$InsertColHeadName = @()做,而是绕到它下面的方式。

在主函数中,我创建了数组Array = New-Object System.Collections.Generic.List[System.Object]。当调用函数时,我传递参数为([ref] $InsertColHeadName)

在param中的调用函数中,我将参数设置为[ref] $InsColHeadName作为新名称,以便不与主函数混合使维护更简单,然后通过执行($InsColHeadName.Value).Add(...);将值添加到数组中。

上面通过引用传递给主函数返回工作。