Yos*_*aki 0 powershell foreach loops object
我正在尝试使用 PowerShell 中的 foreach 循环创建对象。尝试使用“while”循环,但也失败了。显然,循环方法不允许我创建对象......
无需再费周折...
我有两个脚本 - Class.psm1 和 Main.ps1。
在Class.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}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在Main.ps1上
Using module ".\Class.psm1"
$AllCars = {'Toyota', 'Honda'}
[array]$Objects = @()
foreach ($car in $AllCars) {
$temp = New-Object Car("$car")
$Objects += $temp
}
Run Code Online (Sandbox Code Playgroud)
Main.ps1 的输出是 $Objects 只是返回“Toyota”和“Honda”,而不是对象(以及它应该具有的属性)。
但是,如果我只是单独创建对象,它会工作得很好。
例如:
$temp = New-Object Car('Toyota')
$Objects += $temp
$temp = New-Object Car('Honda')
$Objects += $temp
Run Code Online (Sandbox Code Playgroud)
然而,这太过于体力劳动或者相当不切实际。
我可以知道哪个区域的代码出错了吗...?如何在循环中创建对象?
这个问题是你正在使用{'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
}
Run Code Online (Sandbox Code Playgroud)
由于有人问我为什么使用袋鼠代码,所以我决定发布更短的回复
$Objects = 'Toyota', 'Honda' | %{
New-Object Car("$car")
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
607 次 |
最近记录: |