相当于C#中委托给另一个迭代器的Javascript yield*?
Javascript有一个相当于C#中委托给另一个迭代器的Javascript yield*?,javascript,c#,.net,Javascript,C#,.net,Javascript有一个yield*,用于委托给另一个生成器或iterable对象,这样下面的用例就会产生123456789: for(func1(2,5,8)的常数n)console.log(n) 函数*func1(…nrs){ 用于(nrs的常数n){ 收益率*2(n) } } 函数*func2(nr){ 产量nr-1 产量nr 产量nr+1 } 问题:是否已经或有任何计划为C#中的yield*提供等效功能 我发现在C#中执行等效操作的唯一方法是在func1中使用两个循环,例如: st
yield*
,用于委托给另一个生成器或iterable对象,这样下面的用例就会产生123456789
:
for(func1(2,5,8)的常数n)console.log(n)
函数*func1(…nrs){
用于(nrs的常数n){
收益率*2(n)
}
}
函数*func2(nr){
产量nr-1
产量nr
产量nr+1
}
问题:是否已经或有任何计划为C#中的yield*
提供等效功能
我发现在C#中执行等效操作的唯一方法是在
func1
中使用两个循环,例如:
static void Main(字符串[]args)
{
foreach(func1(2,5,8)中的var n)Console.WriteLine(n);
}
静态IEnumerable func1(参数int[]nrs){
foreach(nrs中的var iter)
foreach(函数2中的变量n(iter))
收益率n;
}
静态IEnumerable func2(整数编号){
收益率nr-1;
收益率;
收益率nr+1;
}
虽然没有等价于收益率*
,但在您的示例中,您可以使用以下方法实现同样的效果:
C#没有类似python的
yield-from
的概念,但是有返回单个值的yield-return
。这意味着您需要在C#中创建嵌套的foreach
没有类似的内容,而且据我所知,也没有计划添加它。注意:不久前有一个功能请求:另一个选择是LINQ:nrs。SelectMany(func2)
谢谢。您在中有一个输入错误,产生0
。应该是yield return 0
@MiguelGamboa是的,非常准确。
static IEnumerable<int> func1(params int[] nrs)
=> nrs.SelectMany(func2);
static IEnumerable<int> func1(params int[] nrs)
{
yield return 0; // Another yield
foreach (var n in nrs.SelectMany(func2)) yield return n; // Loop now needed
}