我在我的统一3d程序中使用yield return东西作为协程。
我使用Unity3d 4.3和c#3.5。
如果这是c#中的错误,我应该在哪里向c#团队报告?
public class ClosureTest : TestMonoBehaviour {
public void doTest() {
var a = Test3();
a.MoveNext();
a.MoveNext();
}
class Ctest2 {
public int a;
}
class Ctest1 {
public Ctest2 t2;
}
IEnumerator Test3() {
yield return null;
var c2FuncList = new List<Func<Ctest2>>();
var c1List = new List<Ctest1>();
for (var i = 0; i < 3; i++)
{
var ic1 = new Ctest1();
ic1.t2 = new Ctest2();
ic1.t2.a = i;
c1List.Add(ic1);
}
foreach (var ic1 in c1List)
{
var ic2 = ic1.t2;
c2FuncList.Add(delegate {
return ic2;
});
}
for (var i = 0; i < 3; i++)
{
Equal(c2FuncList[i]().a, i); // always 2.
}
}
}
如果我运行doTest,那个类中的Equal会说需要0,但得到2。