You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell嵌入的C#代码中直接调用Linq Min()方法(无需using与类包装)

问题

在PowerShell脚本中嵌入C#代码时,希望直接通过指定Linq中Min()方法的完全限定名来调用它,无需添加using块和额外的类包装代码,替代原本需要依赖using的写法。

原本的代码片段如下:

$myArray = @(7,6,5,4)

Add-Type @" 
public static int[] indexOfMin(int[] arr){
    int min = arr.Linq.Min();
    return new int[] {min, Array.IndexOf(arr, min)};
}
"@ -name my -Namespace System

$minValue, $minIndex = [my]::indexOfMin($myArray)

解决方案

Linq的Min扩展方法本质是System.Linq.Enumerable类下的静态方法,直接使用该类的完全限定名调用静态方法即可,无需依赖扩展方法语法糖或using声明。修改后的代码如下:

$myArray = @(7,6,5,4)

Add-Type @" 
public static int[] indexOfMin(int[] arr){
    // 直接用完全限定名调用Enumerable的静态Min方法
    int min = System.Linq.Enumerable.Min(arr);
    // Array.IndexOf也加上完全限定名,避免潜在命名冲突
    return new int[] {min, System.Array.IndexOf(arr, min)};
}
"@ -name my -Namespace System

$minValue, $minIndex = [my]::indexOfMin($myArray)

说明

  • 扩展方法的语法糖(比如arr.Min())需要当前代码域引入对应的命名空间,而直接调用System.Linq.Enumerable.Min(arr)绕开了这个限制,直接通过静态方法的方式调用。
  • 给Array.IndexOf加上完全限定名System.Array.IndexOf,可以确保在任何命名空间下都能正确调用该方法,避免潜在的命名冲突。

内容的提问来源于stack exchange,提问作者Carsten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 14:24:18