LINQ可以在PowerShell中使用吗?

杰森·博伊德(Jason Boyd):

我正在尝试在PowerShell中使用LINQ。由于PowerShell是基于.NET Framework构建的,因此这似乎应该完全有可能,但是我无法使其正常工作。例如,当我尝试以下(人为)代码时:

$data = 0..10

[System.Linq.Enumerable]::Where($data, { param($x) $x -gt 5 })

我收到以下错误:

找不到“ Where”和参数计数:“ 2”的重载。

没关系,事实可以用来完成Where-Object这个问题的目的不是要找到在PowerShell中执行此操作的惯用方式。如果我可以使用LINQ,则在PowerShell中完成某些任务将容易很多年。

user4003407:

您的代码存在问题,因为PowerShell无法确定ScriptBlock实例({ ... })应该转换为哪种特定的委托类型因此,无法为该Where方法的通用第二个参数选择类型具体的委托实例化而且它也没有语法来明确指定通用参数。要解决此问题,您需要自己将ScriptBlock实例强制转换为正确的委托类型:

$data = 0..10
[System.Linq.Enumerable]::Where($data, [Func[object,bool]]{ param($x) $x -gt 5 })

为什么[Func[object, bool]]有效,但[Func[int, bool]]无效?

因为您$data[object[]],而不是[int[]],因为PowerShell [object[]]默认情况下会创建数组。但是,您可以[int[]]显式构造实例:

$intdata = [int[]]$data
[System.Linq.Enumerable]::Where($intdata, [Func[int,bool]]{ param($x) $x -gt 5 })

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章