在 PowerShell 中调用静态通用 LINQ 扩展方法

2024-05-07

人们可以使用以下简单的表示法在 PowerShell 中调用许多 LINQ 方法:

[int[]] $numbers = 1..10000
[Linq.Enumerable]::Sum($numbers)

在调用中包含 lambda 甚至是一件相对简单的事情:

[Func[int,int]] $delegate = { $n = $args[0]; if ($n % 3) { $n } else { -$n } }
[Linq.Enumerable]::Sum($numbers, $delegate)

不过,我想知道的是如何调用genericPowerShell 中的 LINQ 方法:有可能吗? 我发现这个问题 https://stackoverflow.com/q/4241985/115690这似乎表明可以,但我还没有确定如何将该信息应用到 LINQ。 (另外,事实上,这是旧信息,PS 版本 5 很可能有一种更简洁的方法来做到这一点。)

那么如何才能调用[Linq.Enumerable]::Cast<T>(...) or [Linq.Enumerable]::OfType<T>(...)在 PowerShell 中正确吗?

2017.05.10 更新

好的,根据@Mathias 的评论,让我们坚持下去MakeGenericMethod。在 C# 中,这个咒语有效:

var ofTypeForString = typeof(System.Linq.Enumerable).GetMethod("OfType").MakeGenericMethod(typeof(string));
var stuff = new object[] { 1.2, "abc", "def" };
var results = ofTypeForString.Invoke(null, new[] { stuff });

我仍然缺少的是如何翻译typeof(System.Linq.Enumerable)到 PowerShell。我认为至少其中之一应该有效,但它们都返回 null:

[System.Type]::GetType("System.Linq.Enumerable")
[System.Type]::GetType("Linq.Enumerable")
[System.Type]::GetType("Enumerable")

我确信我错过了一些简单的事情;建议?


是的,PetSerAl 和 ejohnson 的评论当然都是正确的;我只是因为某种原因出现了心理障碍。因此,对于那些可能感兴趣的人来说,这是完整的解决方案:

$stringType = "".GetType() # set to your target type
$ofTypeForString =
        [Linq.Enumerable].GetMethod("OfType").MakeGenericMethod($stringType)
$stuff = @("12345", 12, "def")
# The last comma below wraps the array arg $stuff within another array
$ofTypeForString.Invoke($null, (,$stuff)) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PowerShell 中调用静态通用 LINQ 扩展方法 的相关文章

随机推荐

  • 在 WSL 实例之间共享 Docker 守护进程

    关于在没有 Docker Desktop 的情况下从 WSL 中运行 Docker 有一篇综合文章here https dev to bowmanjd install docker on windows wsl without docker
  • 从单个应用程序中的多个线程调用 dll 函数是否安全?

    我正在 Delphi 2009 中编写一个服务器应用程序 它实现了多种类型的身份验证 每种身份验证方法都存储在单独的 dll 中 第一次使用身份验证方法时 会加载适当的 dll 仅当应用程序关闭时 DLL 才会被释放 在服务器线程 连接 之
  • Jekyll 可以根据 URL 参数提供内容吗?

    我正在将博客从 WordPress 迁移到 GitHub 页面 在我的网站日志中 我注意到有很多这样的请求 GET wp feed atom 此 301 重定向到该站点的 ATOM 提要 我本来打算用httrack抓取我的网站并迁移所有静态
  • 如何在 jinja2 中缩进嵌套的 if/for 语句

    我有一个很长的 Jinja2 模板 其中有很多嵌套if for声明 很难读 我想缩进 位 使其更清晰 但是 如果我这样做 这些块的内容也会进一步缩进 我怎样才能缩进just the bits 我正在使用安塞布尔 重现步骤 template
  • Apple 应用程序加载器 - 如何更改正在使用的 Apple ID?

    我想切换 Apple App Loader 使用的 Apple ID 我找不到更改应用程序本身使用的帐户的方法 谷歌搜索没有带来任何有用的信息 当我启动加载程序应用程序时 它给我一个错误 您的 Apple ID 或密码输入不正确 20101
  • 解决斐波那契数列的 Lisp 方法

    我想尝试学习 Lisp 但很快就放弃了 我想我会再试一次 我正在看 求 400 万以下所有偶数斐波那契数的总和 我写了下面的代码 它可以工作 但是很丑陋 其中最主要的是它太慢了 因为它一直在进行简单的递归 当我用 Python 编写这个程序
  • 将 PDF 存储在 MySQL 数据库中

    我正在开发一个应用程序 我需要创建 PDF 格式的发票 我在用着pdf包 https github com psliwa PdfBundle并且 PDF 文件已正确创建 public function helloAction format
  • 如何以最大窗口形式保存 matplotlib 图而不是默认大小?

    有人知道我应该如何解决这个问题吗 我知道有一个保存按钮 我可以手动执行此操作 但我正在绘制 100 多个图表 所以我希望有一种方法可以自动执行此操作 我正在使用 TkAgg 后端 并寻找任何可能的解决方案 通过在我的绘图函数末尾使用以下内容
  • 如何在 Android RecyclerView 中显示一组项目的日期/日期

    您好 我在 JSONArray 中获取数据如下 chatArray msg id 193 user id 15235 first name Vishal user name vishal13 message twilio chat time
  • 是否可以在 R 中为 data.frame 命名别名

    使用某些数据标准时 使用多种方法来查看 data frame 的列会更简单 作为一个具体示例 在使用 SDTM 数据进行临床试验时 每种数据类型 如实验室或生命体征 都有一列时间点 实验室名称为 LBPT 生命体征名称为 VSTPT 理想情
  • 在 C 中使用 sqrtf():“未定义对‘sqrtf’的引用”

    我正在使用Linux Ubuntu 12 04 https en wikipedia org wiki Ubuntu version history Ubuntu 12 04 LTS 28Precise Pangolin 29 Precis
  • Linux shell 命令逐块读取/打印文件

    是否有一个标准的 Linux 命令可以用来逐块读取文件 例如 我有一个大小为 6kB 的文件 我想读取 打印第一个 1kB 然后是第二个 1kB 看来猫 头 尾在这种情况下不起作用 非常感谢 你可以这样做read n在循环中 while r
  • 将类添加到一组

    我有一群 ul 是动态创建的 我需要在最后添加一个类 li 每一个 I have ul li last each function this addClass last 但这仅仅增加了一个class last 到最后 ul 不在所有的 ul
  • jQuery 选择除最后一个之外的所有内容

    使用 jQuery 如何选择除最后一个元素之外的所有元素 div class elem 1 div div class elem 2 div div class elem 3 div 例如 我想隐藏 div 的 1 和 2 但保留 3 di
  • 为什么人们在 ICommand 上使用 CommandManager.InvalidateRequerySuggested()?

    我正在制作自己的一些自定义 ICommand 实现 我看到很多实现都是这样的 public event EventHandler CanExecuteChanged add CommandManager RequerySuggested v
  • Lego Mindstorm NXT 的 C# 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有适用于 Lego Mindstorm NXT 的最新 C NET 库 NXT NET 乐高头脑风暴 最后更新时间 2008 年 4
  • subprocess.Popen args 参数的最大长度是多少?

    我在用Popen http docs python org library subprocess html using the subprocess modulesubprocess 模块中的函数来执行命令行工具 subprocess Po
  • Xcode 4.4 和 4.5 在项目关闭时冻结

    自从升级到 Xcode 4 4 并再次升级到 4 5 在 Lion 上运行 后 每次我关闭应用程序项目或退出时 Xcode 都会冻结大约 3 5 分钟 在此期间 活动监视器显示 CPU 占用率为 95 但几乎没有发生磁盘活动 我尝试过卸载并
  • URL 重写 .htaccess

    我正准备开发一个具有以下 url 结构的网站 我是 url 重写的新手 想知道处理此问题的最佳方法 http domain com index php http domain com about about php http domain
  • 在 PowerShell 中调用静态通用 LINQ 扩展方法

    人们可以使用以下简单的表示法在 PowerShell 中调用许多 LINQ 方法 int numbers 1 10000 Linq Enumerable Sum numbers 在调用中包含 lambda 甚至是一件相对简单的事情 Func