首先,这是代码:
for (int j = 1; j <= count; j++)
{
db.Child("Some Child").GetValueAsync().ContinueWith(task =>
{
Debug.Log("j: " + j); // Here the Debug will show me that j = count
if (task.IsFaulted)
{
// ERROR HANDLER
}
else if (task.IsCompleted)
{
// Some Code Here
}
});
}
好的,所以我的问题是&#34; .... ContinueWith(task =&gt; ...&#34;&#39; j&#39;将直接等于count变量为什么会发生这种情况以及如何解决呢?或者还有另一种方法可以解决这个问题吗?
答案 0 :(得分:1)
好的,所以我的问题是在&#34; .... ContinueWith之后(task =&gt; ...&#34;&#39; j &#39;将直接等于count变量。为什么会这样 以及如何解决它?
那是因为您使用了<=
而不是<
。使用<=
时,j
必须等于count
才能满足并完成循环条件。如果您希望j
小于count
,请使用count-1
或仅使用<
。
所以,那应该是
for (int j = 1; i <= count-1; j++)
或者
for (int j = 1; i < count; j++)
请注意,数组从0开始而不是1,因此int j = 1;
应为int j = 0;
,但我感觉您想要做什么,并且您从{{1}开始循环故意。
最后,另一个问题是你的变量是在循环中捕获的,因为你在1
函数中使用了lambda。有关详细信息,请参阅this帖子。要在ContinueWith
lambda函数中使用j
变量,请复制它,然后使用该副本而不是j变量。
ContinueWith
完整的固定代码:
db.Child("Some Child").GetValueAsync().ContinueWith(task =>
{
//MAKE A COPY OF IT
int jCopy = j;
Debug.Log("j: " + jCopy); // Here the Debug will show me that j = count
}