2016-09-06 3 views
1

У меня есть переменная объекта массива как [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

Почему вы используете '[ref] $ arr = @()' вместо '$ arr = @()' в первую очередь? –

+0

Прежде, чем я использовал его внутри основной функции, он не нуждался в ссылке. Поскольку основная функция использует определенную логику пару раз, то же самое, что имеет некоторую логику проверки, я думал, что было бы лучше нажать ее на функцию и вызвать функцию. Переменная, которую я пытаюсь использовать, используется в другом вызове функции, которая может потребоваться, чтобы переменная была доступна. –

ответ

0

Тем не менее путать о том, как сделать это с массивом установить в качестве $InsertColHeadName = @() но пошел вокруг него следующим образом.

В основной функции я создал массив как Array = New-Object System.Collections.Generic.List[System.Object]. При вызове функции передал параметр как ([ref] $InsertColHeadName).

Внутри функции вызова в параметре я установил параметр как [ref] $InsColHeadName в качестве нового имени, чтобы не смешивать его с основной функцией, чтобы упростить поддержку и затем добавить значение в массив, выполнив ($InsColHeadName.Value).Add(...);.

Вышеприведенная процедура передается по ссылке, когда она возвращается к основной функции.

Смежные вопросы