在IEnumerable上使用PowerShell中的GetEnumerator使用C#yieldreturn

c#

我有一个返回IEnumerable<T>(或IEnumerable)的 API ,它是在 C# 中使用yield return.

一个简单的例子:

public class Class1
{
    public IEnumerable<int> Enumerate()
    {
        yield return 1;
    }
}

在 PowerShell 中,我无法调用IEnumerable<T>.GetEnumerator方法返回的可枚举Enumerate()

$cls = New-Object Class1

$enumerable = $cls.Enumerate()

Write-Host $enumerable.GetType()

$enumerator = $enumerable.GetEnumerator()
$cls = New-Object Class1

$enumerable = $cls.Enumerate()

Write-Host $enumerable.GetType()

$enumerator = $enumerable.GetEnumerator()

它失败了:

找不到“GetEnumerator”和参数计数的重载:“0”。

$enumerable.GetType()收益预期:

Class1+d__0

C# 中的相同代码按预期工作。


如果该方法是使用普通实现的return

那么在PowerShell中就没有问题了。


为什么 PowerShell 看不到GetEnumerator()?

我发现了这个有点相关的问题:PowerShell/GetEnumerator,但它并没有真正给我答案/解决方案(或者我没有看到)。


解释一下,为什么我要使用IEnumerator, 而不是使用 PowerShell foreach:我想使用从Start-ThreadJob. 并且枚举是惰性且耗时的。因此,在枚举之前将结果收集到某个容器会导致性能下降。

以上是在IEnumerable上使用PowerShell中的GetEnumerator使用C#yieldreturn的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>