设置由引用

时间:2016-09-06 16:00:06

标签: powershell

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

我尝试使用谷歌搜索,但似乎无法找到合适的解决方案。

我收到以下错误:

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

3 个答案:

答案 0 :(得分:0)

仍然对如何使用数组设置$InsertColHeadName = @()感到困惑,但是以下面的方式解决了这个问题。

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

在param中的调用函数内部,我将参数设置为[ref] $InsColHeadName作为新名称,以免与main函数混淆,使maintenence更容易,然后通过执行将值添加到数组中($InsColHeadName.Value).Add(...);

上面的内容在返回主函数时通过引用传递。

答案 1 :(得分:0)

在函数中,InsertColHeadName已经是一个引用。向其添加[ref]会创建该引用的引用。

代替尝试:

$InsertColHeadName.Value += expression

这里是一个例子:

function AddMe([ref]$array)
{
    $array.value += 40
}

$x = @(1..10)

Write-Host Before Calling AddMe $x
AddMe ([ref]$x)
Write-Host After Calling AddMe $x

输出:

Before Calling AddMe 1 2 3 4 5 6 7 8 9 10
After Calling AddMe 1 2 3 4 5 6 7 8 9 10 40

答案 2 :(得分:0)

发生了同样的问题。只需确保您不要多次将对象转换为[ref]。就像强制转换[ref] [ref] [ref] $ YourObject。