如何在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
相关产品推荐
相关产品推荐

