Невозможно создать объект в цикле Foreach в PowerShell - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь создать объект с помощью цикла foreach в PowerShell. Попытка с использованием цикла while также не удалась. Видимо, методы зацикливания не позволяют мне создавать объекты ...

Без лишних слов ...

У меня есть два скрипта - Class.psm1 и Main.ps1.

Вкл. Класс.psm1

Class Car {
    [string]$brand
    [string]$model
    [string]$color

    #Constructor
    Car ([string]$brand) {
         $this.brand = $brand

         switch -wildcard ($this.brand) {
             ('Toyota') {$this.model = 'ABC'; $this.color = 'red'; break}
             ('Honda') {$this.model = 'FGH'; $this.color = 'blue'; break}
         }
    }
}

И на Main.ps1

Using module ".\Class.psm1"

$AllCars = {'Toyota', 'Honda'}
[array]$Objects = @()

foreach ($car in $AllCars) {
    $temp = New-Object Car("$car")
    $Objects += $temp
}

Вывод из Main.ps1 заключается в том, что $ Objects просто возвращают «Toyota» и «Honda» вместо объектов (и свойств, которые он должен иметь).

Однако, если бы я просто создал объект по отдельности, он будет работать нормально.

Например:

$temp = New-Object Car('Toyota')
$Objects += $temp
$temp = New-Object Car('Honda')
$Objects += $temp

Однако это слишком ручная работа или скорее непрактичная.

Могу ли я знать, в какой области коды пошли не так ...? Как мне создать объекты внутри цикла?

1 Ответ

4 голосов
/ 09 марта 2019

Эта проблема - вы используете {'Toyota', 'Honda'} вместо ('Toyota', 'Honda')

{'Toyota', 'Honda'} - это кодовый блок. Когда вы передаете его New-Object Car("$car"), оно фактически передает New-Object Car("'Toyota', 'Honda'")

$AllCars = ('Toyota', 'Honda')
[array]$Objects = @()

foreach ($car in $AllCars) {
    $temp = New-Object Car("$car")
    $Objects += $temp
}

Поскольку меня спросили, почему код кенгуру, я решил опубликовать более короткий ответ

$Objects = 'Toyota', 'Honda' | %{
    New-Object Car("$car")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...