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