在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. 并且枚举是惰性且耗时的。因此,在枚举之前将结果收集到某个容器会导致性能下降。
THE END
二维码