【问题标题】:Add new set of values to ArrayList将一组新值添加到 ArrayList
【发布时间】:2018-01-09 13:54:53
【问题描述】:

所以我在$var 中存储了以下 ArrayList:

ip_prefix 区域字符串 0.0.0.0/24 全球性的东西 0.0.0.0/24 全球性的东西 0.0.0.0/24 全球性的东西 0.0.0.0/24 全球性的东西

我需要为此添加一行,但是以下代码返回错误:

$var.add("127.0.0.1/32", "GLOBAL", "something")

错误:

找不到“添加”和参数计数的重载:“3”。 在行:1 字符:1 + $awsips.add("127.0.0.1/32", "全球", "某事") + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~ + CategoryInfo : NotSpecified: (:) [], MethodException + FullyQualifiedErrorId : MethodCountCouldNotFindBest

我确信我必须调整一些简单的东西,但是 Google 搜索让我绕圈子。

【问题讨论】:

标签: arrays windows powershell arraylist


【解决方案1】:

应该做的工作

   $obj = New-Object PSObject -Property @{            
        ip_prefix = "0.0.0.0/24"                
        region = "GLOBAL"              
        string = "Something"           
    }    

$var+= $obj      

【讨论】:

  • 这是正确的方法,但我会使用PSObject 而不是Object,并将属性列表作为哈希表传递给New-Object,而不是单独添加每个属性。在 PowerShell v3 和更新版本上,选择的方法是直接在属性哈希表上使用 [PSCustomObject] 类型加速器。
  • 好建议。我已经修改了代码以反映这一点。
【解决方案2】:
$var = New-Object System.Collections.ArrayList
$var.Add(@{"ip_prefix" = "0.0.0.0/24"; "region" = "GLOBAL"; string = "Something"})
$var.Add(@{"ip_prefix" = "127.0.0.1/32"; "region" = "GLOBAL"; string = "SOMETHING"})

$var
$var | %{ Write-Output "$($_.ip_prefix), $($_.region), $($_.string)" }

或者:

$var = @()
$var += @{"ip_prefix" = "0.0.0.0/24"; "region" = "GLOBAL"; string = "Something"}
$var += @{"ip_prefix" = "127.0.0.1/32"; "region" = "GLOBAL"; string = "SOMETHING"}

【讨论】:

  • @{...} -> [PSCustomObject]@{...}
【解决方案3】:

您的输出表明您的数组列表包含自定义对象,其属性为ip_prefixregionstring

因此,您需要将具有所需属性值的单个对象添加到您的数组列表中。

相比之下,您尝试将 3 个单独的元素 添加到数组列表中,这不仅在概念上是错误的,而且在语法上也失败了,因为 .Add() method 只接受一个 参数(技术上,有一个添加多个项目的方法,.AddRange())。

在 PSv3+ 中,语法 [pscustomobject]@{...} 从哈希表文字构造自定义对象,并保留条目的定义顺序。

$null = $var.Add(
  [pscustomobject] @{ ip_prefix="127.0.0.1/32"; region="GLOBAL"; string="something" }
)

注意 $null = ... 如何用于抑制 .Add() 方法的输出(插入项目的索引)。

SQLAndOtherStuffGuy's answer 在正确的轨道上,但请注意$var += ... 会默默地将存储在$var 中的数组列表替换为常规 PowerShell 数组 ([System.Object[]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    相关资源
    最近更新 更多