Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
相当于C#中委托给另一个迭代器的Javascript yield*?_Javascript_C#_.net - Fatal编程技术网

相当于C#中委托给另一个迭代器的Javascript yield*?

相当于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

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
中使用两个循环,例如:

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
}