Как передать ArrayList в функции и получить результаты обратно в powershell - PullRequest
0 голосов
/ 04 февраля 2019

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

Основной файл:

. $funcFile
$myParam = "Hello World"  
$myObj = getMyObject $myParam
$myObj.myArrayList.Count   # This works (outputs 0)
myFunction2 ($myObj.myArrayList)
$myObj.myArrayList.Count   # This also works (outputs 0)

fncFile:

function getMyObject([String] $myParam) {
    $myObj = @{  
         "myArrayList" = (New-Object System.Collections.ArrayList)  
    }
    return $myObj
}

function myFunction2 ([System.Collections.ArrayList] $myArr){
    $myArr.Count  # This doesn't work (outputs nothing)
    if($myArr -eq $null) {
         Write-Host "Array List Param is null"   # This condition is FALSE - nothing is printed
    }
}

Что я делаю не так?
Как я могуиспользовать тот же ArrayList в function2 и других внутренних функциях?

1 Ответ

0 голосов
/ 04 февраля 2019

Если вы хотите передать переменную и изменить ее в функции и использовать результат, есть два способа:

Передать по значению:

$arr = New-Object System.Collections.ArrayList
function FillObject([System.Collections.ArrayList]$array, [String] $myParam) {
    return $array.Add($myParam)
}
$arr = FillObject -array $arr -myParam "something"
$arr.Count

Передать по ссылке (о чем вы спрашивали)

[System.Collections.Generic.List[String]]$lst = (New-Object System.Collections.Generic.List[String]])
function FillObject([System.Collections.Generic.List[String]][ref]$list,[String] $myParam) {
    $list.Add($myParam)
}
FillObject -list ([ref]$lst) -myParam "something"
$lst.Count

Вы должны добавить [ref] как в определении функции, так и при передаче параметра.Если это поможет вам - Powershell и C # полагаются на .NET, поэтому их синтаксис схож.C # способ использования ref:

int number = 1;
void Method(ref int refArgument)
{
    refArgument = refArgument + 44;
}
Method(ref number);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...