相关疑难解决方法(0)

C#5.0中捕获的闭包(循环变量)

这在C#5.0中正常工作(按预期方式):

var actions = new List<Action>();
foreach (var i in Enumerable.Range(0, 10))
{
    actions.Add(() => Console.WriteLine(i));
}
foreach (var act in actions) act();
Run Code Online (Sandbox Code Playgroud)

打印0到9.但是这个显示10次10​​次:

var actions = new List<Action>();
for (var i = 0; i < 10; i++)
{
    actions.Add(() => Console.WriteLine(i));
}
foreach (var act in actions) act();
Run Code Online (Sandbox Code Playgroud)

问题:这是我们在5.0之前的C#版本中遇到的问题; 所以我们不得不使用一个循环局部占位符来进行闭包,它现在已经修复了 - 在C#5.0中 - 在"foreach"循环中.但不是"for"循环!

这背后的原因是什么(也没有解决for循环问题)?

c# foreach closures for-loop c#-5.0

46
推荐指数
1
解决办法
5219
查看次数

动态创建goroutines的最佳方法是什么?

对不起,如果这是一个新问题,但我是新手;).我有以下游乐场.如何动态创建goroutines?我在操场上的第一组按预期工作,但我的第二组为每个值返回"11".我可以通过取消注释第38行来解决它,但这看起来有点像黑客.有没有更优选的方式动态创建我的goroutines?

package main

import (
    "fmt"
    "log"
    "time"
)

func myFunc(i int) int {
    return i
}

func first() {
    firstChannel := make(chan int)
    go func() { firstChannel <- myFunc(0) }()
    go func() { firstChannel <- myFunc(1) }()
    go func() { firstChannel <- myFunc(2) }()
    go func() { firstChannel <- myFunc(3) }()
    go func() { firstChannel <- myFunc(4) }()
    go func() { firstChannel <- myFunc(5) }()
    go func() { firstChannel <- myFunc(6) }()
    go func() { firstChannel <- …
Run Code Online (Sandbox Code Playgroud)

go

2
推荐指数
1
解决办法
484
查看次数

标签 统计

c# ×1

c#-5.0 ×1

closures ×1

for-loop ×1

foreach ×1

go ×1