полезный ответ Цзяо предоставляет эффективное решение:
Чтобы добавить элементы к вашему экземпляру [System.Collections.Generic.List`1[BuildWarning]]
, используйте его метод .Add()
, а не оператор +=
PowerShell.
Оператор +=
PowerShell , обычно , обычно обрабатывает LHS со значением коллекции как массив 1016 * - независимо от конкретного типа коллекции LHS - и «добавляет» к этому массиву то есть он создает (новый) массив, содержащий все элементы коллекции LHS, за которыми следует элемент (ы) RHS.
Другими словами: с использованием +=
игнорирует определенный тип коллекции LHS и неизменно назначает (новый) массив [object[]]
, содержащий элементы коллекции LHS плюс элемент RHS ( s).
Такое поведение может быть удивительным, учитывая, что разумно ожидать сохранения определенного типа сбора LHS - см. это обсуждение на GitHub .
В вашем конкретном случае вы видите ошибку в Windows PowerShell начиная с версии 5.1 , которая была исправлена в PowerShell Core :
Проблема возникает, если вы попытаетесь тип-ограничение переменная списка , $warnings
в вашем случае. Ограничение типов означает размещение типа (приведение) перед именем переменной LHS, которое фиксирует тип переменной, так что последующие присвоения должны быть того же или совместимого типа.
Чтобы привести простой пример:
$list = New-Object 'System.Collections.Generic.List[int]'
$list += 1 # OK - $list is not type-constrained
Write-Verbose -Verbose "Unconstrained `$list 'extended': $list"
# Type-constrained $list
[System.Collections.Generic.List[int]] $list = New-Object 'System.Collections.Generic.List[int]'
$list += 1 # !! BREAKS, due to the bug
Write-Verbose -Verbose "Type-constrained `$list 'extended': $list"
Я рекомендую вам сообщить об этой ошибке на форуме Windows PowerShell UserVoice .