在PowerShell中将对象作为类成员创建数组

在PowerShell中将对象作为类成员创建数组,powershell,Powershell,在运行下面的代码时,我总是会出错。我不明白我做错了什么 错误1:无法对空值表达式调用方法。在 行:25字符:9 错误2:无法索引到空数组中。第43行字符:1 代码: 要将元素添加到数组中,我们使用+=运算符 $this.Steps += $newStep 添加是为ArrayList保留的: $al = New-Object System.Collections.ArrayList $al.Add('Example') 数组列表具有更好的性能,请参见下面修订的代码 Class Step {

在运行下面的代码时,我总是会出错。我不明白我做错了什么

错误1:无法对空值表达式调用方法。在 行:25字符:9

错误2:无法索引到空数组中。第43行字符:1

代码:


要将元素添加到数组中,我们使用+=运算符

$this.Steps += $newStep
添加是为ArrayList保留的:

$al = New-Object System.Collections.ArrayList
$al.Add('Example')

数组列表具有更好的性能,请参见下面修订的代码

Class Step {
    [int]$StepNumber = 0
    [string]$Name = ''
    [string]$ScriptFile = ''
    [int]$status = 0 # 0 = 'InComplete', 1 = 'Complete', 2 = 'Failed', -1 = 'Skipped'
    [string]$DependencyStepNumber = -1

    Step([string]$Name, [int]$StepNumber, [string]$ScriptFile) {
        $this.Name = $Name
        $this.StepNumber = $StepNumber
        $this.ScriptFile = $ScriptFile
    }
}


Class Guide {
    [int]$StepNumberCounter = 0
    [string]$Name = ''
    [System.Collections.ArrayList]$Steps = @()

    [int]AddStep([string]$Name, [string]$ScriptFile) {
        $newStepNumber = $this.GetNewStepNumber()
        $newStep = [Step]::new($Name, $newStepNumber, $ScriptFile)

        $this.Steps.Add($newStep)

        return $newStepNumber
    }

    [int]GetStepName([int]$StepNumber) {
        return $this.Steps[$StepNumber-1]
    }

    [int]GetNewStepNumber() {
        return $this.StepNumberCounter += 1
    }
}

$Guide = [Guide]::new()

$Guide.AddStep('Step One','ScriptOne.ps1')
$Guide.AddStep('Step Two','ScriptTwo.ps1')

Write-Output $Guide.Steps[0]
Write-Output $Guide.Steps[1]

请指出第25行和第43行。Jean-Claude Colette是正确的,请切换到使用
+=
而不是
Add()
。谢谢!就是这样。是的,这解决了这个问题,我的初衷是使用ArrayList,谢谢。
Class Step {
    [int]$StepNumber = 0
    [string]$Name = ''
    [string]$ScriptFile = ''
    [int]$status = 0 # 0 = 'InComplete', 1 = 'Complete', 2 = 'Failed', -1 = 'Skipped'
    [string]$DependencyStepNumber = -1

    Step([string]$Name, [int]$StepNumber, [string]$ScriptFile) {
        $this.Name = $Name
        $this.StepNumber = $StepNumber
        $this.ScriptFile = $ScriptFile
    }
}


Class Guide {
    [int]$StepNumberCounter = 0
    [string]$Name = ''
    [System.Collections.ArrayList]$Steps = @()

    [int]AddStep([string]$Name, [string]$ScriptFile) {
        $newStepNumber = $this.GetNewStepNumber()
        $newStep = [Step]::new($Name, $newStepNumber, $ScriptFile)

        $this.Steps.Add($newStep)

        return $newStepNumber
    }

    [int]GetStepName([int]$StepNumber) {
        return $this.Steps[$StepNumber-1]
    }

    [int]GetNewStepNumber() {
        return $this.StepNumberCounter += 1
    }
}

$Guide = [Guide]::new()

$Guide.AddStep('Step One','ScriptOne.ps1')
$Guide.AddStep('Step Two','ScriptTwo.ps1')

Write-Output $Guide.Steps[0]
Write-Output $Guide.Steps[1]