是否可以将where
子句传递给高级函数?一个例子来使其更清楚;
$Fruits = @(
@{
Name = 'Kiwi'
Color = 'Green'
}
@{
Name = 'Banana'
Color = 'Yellow'
}
)
Function Get-Stuff {
Param (
[scriptblock]$Filter,
[hashtable[]]$Collection
)
$Collection.Where( { $Filter })
}
Get-Stuff -Filter { $_.Name -eq 'Kiwi' } -Collection $Fruits
在这种情况下,如果函数可以返回与$Fruits.Where( { $_.Name -eq 'Kiwi' })
相同的内容,那就太好了。
正如 ansgar-wiechers 在上面的评论中所述,您必须删除外部脚本块文字 ({}
(:
$Fruits = @(
@{
Name = 'Kiwi'
Color = 'Green'
}
@{
Name = 'Banana'
Color = 'Yellow'
}
)
Function Get-Stuff {
Param (
[scriptblock]$Filter,
[hashtable[]]$Collection
)
# Subexpression removed.
$Collection.Where($Filter)
}
Get-Stuff -Filter { $_.Name -eq 'Kiwi' } -Collection $Fruits