我可以用类的实例填充Generic.List
,每个实例在ID属性中都具有唯一的值,就像这样。
$packages = [System.Collections.Generic.List[object]]::New()
class Package {
# Properties
[String]$ID
# Constructor
Package ([String]$id) {
$this.ID = $id
}
}
foreach ($i in 65..90) {
$packages.Add([Package]::New("$([char]$i)"))
}
现在,我想沿
$packages.IndexOf('C')
的行获取特定项目的索引。但是在C#中执行此操作似乎需要使用lambda,而PowerShell似乎不支持该功能。我宁愿不必初始化我自己的索引变量,也不需要遍历列表中的所有项目以检查其ID并逐步增加索引。但是,也许这是仅在使用本机PS cmdlet的PowerShell和仅使用C#的灰色区域,您在两个极端中都错失了糖,必须自己做? 最佳答案
您可以使用[scriptblock]
作为谓词:
$packages.FindIndex({$args[0].ID -eq 'C'})
# or
$packages.FindIndex({param($item) $item.ID -eq 'C'})
假设您的包裹ID是唯一的,请考虑使用字典而不是列表:
$packages = [System.Collections.Generic.Dictionary[string,Package]]::new([StringComparer]::InvariantCultureIgnoreCase)
class Package {
# Properties
[String]$ID
# Constructor
Package ([String]$id) {
$this.ID = $id
}
}
foreach ($i in 65..90) {
$ID = "$([char]$i)"
$packages.Add($ID, [Package]::new($ID))
}
现在,您无需担心商品的位置,现在,您只需按ID删除商品即可:
$wasRemoved = $packages.Remove("C")
Remove()
成功删除条目时返回$true
,找不到密钥时返回$false