【问题标题】:Unable to Create Object in Foreach Loop in PowerShell无法在 PowerShell 的 Foreach 循环中创建对象
【发布时间】:2019-07-31 08:58:54
【问题描述】:

我正在尝试使用 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}
         }
    }
}

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

但是,这太手工或不切实际。

我可以知道代码在哪个区域出错了...?如何在循环中创建对象?

【问题讨论】:

  • Class.psm1 中有一堆语法错误 - 所有属性和参数都需要在名称前加上$
  • 嗨 Jessen,对不起,我在这里手动输入(因为数据都是编造的),但代码中的代码与我的准确代码接近,语法正确,依此类推。感谢您发现它,将在此处更改它。
  • 您是否编辑了您的类并尝试不重新启动 PowerShell?加载后,对其所做的更改将无法识别。
  • 嗨 Theo.. 是的,你是对的。不知何故,类文件是需要重新启动的文件。它之后工作。谢谢!

标签: powershell loops object foreach


【解决方案1】:

这个问题是您使用的是{'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")
}

【讨论】:

  • 为什么是袋鼠码?只需使用$AllCars = ('Toyota', 'Honda'); <#PleaseTypeANewLineHere#>; $Objects = foreach ($car in $AllCars) { New-Object Car($car) }
  • 我在上面使用他的代码,只是改变了一行。除了用() 替换{} 之外,我没有写任何与他不同的东西。因此,如果您想询问袋鼠代码,请询问发布者。
  • 我也想省略括号,你只需要$AllCars = 'Toyota', 'Honda' 来声明字符串数组。
  • 请原谅我的辱骂措辞。我可怜的词汇把它翻译成'太复杂的代码',没有任何粗鲁或不雅的内涵。对不起。
  • @JosefZ 没问题抱歉弄错了 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多