iLe*_*ing 6 powershell powershell-2.0
如果我使用这样的通用列表:
$foo = New-Object 'system.collections.generic.list[object]'
$foo.Add((New-Object PSObject -Property @{ Name="Foo1"; }))
$foo.Add((New-Object PSObject -Property @{ Name="Foo2"; }))
$foo.Add((New-Object PSObject -Property @{ Name="foo3"; }))
我该如何应用RemoveAll()方法List<T>?是否可以使用谓词?我怎样才能删除以大写字母'F'开头的所有项目?
CB.*_*CB. 11
我认为唯一的方法是不使用System.Predicate需要委托(抱歉,但实际上我无法弄清楚如何在powershell中创建匿名委托)并使用where-object子句.
在我的示例中,我将结果重新分配给$foo需要再次强制转换的同一变量list<T>.
为了避免错误,如果结果计数只有一个,则需要','来创建一个array值
[system.collections.generic.list[object]]$foo =  , ( $foo | ? {$_.name  -cnotmatch "^f" })
编辑:
经过一些测试,我发现如何使用powershell scriptblock使用lambda表达式:
$foo.removeAll( { param($m)  $m.name.startswith( 'F', $false , $null)  })
这是使用System.Predicatepowershell 中需要的方法的正确方法
这是使用脚本块(匿名委托)的另一个选项:
$foo.RemoveAll( {$args[0].Name -clike 'F*'} )
| 归档时间: | 
 | 
| 查看次数: | 2192 次 | 
| 最近记录: |