根据属性值获取泛型/列表中对象的索引

问题描述 投票:1回答:1

我可以用我的类的实例填充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#的灰色区域,您在两个极端中都错失了糖,必须自己制作?

powershell properties indexof generic-list
1个回答
3
投票

您可以使用[scriptblock]作为谓词:

$packages.FindIndex({$args[0].ID -eq 'C'})
# or
$packages.FindIndex({param($item) $item.ID -eq 'C'})
© www.soinside.com 2019 - 2024. All rights reserved.