我在函数中有一个数组对象变量[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
答案 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。