Powershell Как перегрузить оператор индекса массива? - PullRequest
5 голосов
/ 30 марта 2019

Как в Powershell перегружать индексирование оператора массива?

Вот что я делаю сейчас:

class ThreeArray {

    $myArray = @(1, 2, 3)

    [int] getValue ($index) {
        return $this.myArray[$index]
    }

    setValue ($index, $value) {
        $this.myArray[$index] = $value
    }
}

$myThreeArray = New-Object ThreeArray

Write-Host $myThreeArray.getValue(1) # 2

$myThreeArray.setValue(2, 5)
Write-Host $myThreeArray.getValue(2) # 5

И я хочу сделать это:

$myThreeArray = New-Object ThreeArray

Write-Host $myThreeArray[1] # 2

$myThreeArray[2] = 5
Write-Host $myThreeArray[2] # 5

Итак, как мне перегрузить оператор индексирования массива? Это вообще возможно?

Спасибо!

1 Ответ

3 голосов
/ 31 марта 2019

Самый простой подход состоит в том, чтобы извлечь из System.Collections.ObjectModel.Collection<T>

class ThreeArray : System.Collections.ObjectModel.Collection[string]
{
  ThreeArray() : base([System.Collections.Generic.List[string]](1, 2, 3)) {}
}

Чтобы продемонстрировать:

$myThreeArray = [ThreeArray]::new() # same as: New-Object ThreeArray

$myThreeArray[1]     # print the 2nd element

$myThreeArray[2] = 5 # modify the 3rd element...
$myThreeArray[2]     # and print it

'--- all elements:'
$myThreeArray        # print all elmements

Вышеуказанные выходы:

2
5
--- all elements:
1
2
5
...