【发布时间】:2017-03-09 15:13:31
【问题描述】:
我在回调和 for 循环方面遇到了一些问题, 说我有这个代码
public void DoSth(Action<QueryTextureResult> result, IEnumerable<string> arr)
{
int totalData = 0;
foreach (var element in arr) // let's say arr.Count() is 10
{
Action<Texture> onImageReceived = (texture) =>
{
if (result != null)
{
var res = new QueryTextureResult()
{
Texture = texture,
QueryId = queryId,
Index = totalData // why this one is always 10 if the callback takes time?
};
result(res);
Debug.Log("INdex: " + res.Index);
}
};
imageManager.GetImage("http://image.url", onImageReceived);
totalData++;
}
}
如评论中所写,如果我有 10 个元素,则调用 result 需要时间,为什么我收到的 QueryTextureResult.Index 总是 10?它是通过引用传递的吗?有什么办法解决这个问题?
【问题讨论】:
-
变量被捕获,它们都共享相同的内存地址。
标签: c# callback int pass-by-reference pass-by-value