gpt4 book ai didi

c# - Action 回调与 for 循环冲突

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:06 26 4
gpt4 key购买 nike

我有一个奇怪的问题,我需要帮助。

当我打印循环变量 i 时,它打印的是 i = 3。但是它必须是 0、1 或 2。

这是我的代码:

IEnumerator Start()

{

itemCount = 3;

for (int i = 0; i < itemCount; i++)
{
StartCoroutine(TextureFromURL(textureURLString[i], (Sprite callback) =>
{
print("i = " + i);
AddItem();
GameObject.Find("pashaItem(Clone)").GetComponentInChildren<Text>().text = descriptions[u];
GameObject.Find("pashaItem(Clone)").transform.GetChild(1).GetComponent<Image>().sprite = callback;
GameObject.Find("pashaItem(Clone)").name = "pashaItem" + (u + 1).ToString();
}));
}
}

IEnumerator TextureFromURL(string url, Action<Sprite> callback)
{
Sprite s = new Sprite();
WWW textureWWW = new WWW(url);
yield return textureWWW;

if (!String.IsNullOrEmpty(textureWWW.error))
{
print("null ve ya bos");
}
else
{
Texture2D myTexture = textureWWW.texture;
s = Sprite.Create(myTexture, new Rect(0, 0, myTexture.width, myTexture.height), new Vector2(0.5f, 0.5f));
}

callback(s);
}

最佳答案

问题出在匿名方法上。他们指的是同一个循环变量 i。您可以通过复制“i”来解决它。

我精简了您的代码以制作一个简单的工作示例。

 void Start()
{
var itemCount = 3;

for (int i = 0; i < itemCount; i++)
{
var x = i; // Important Line
StartCoroutine(TextureFromURL(() =>
{

print("i = " + x);
}));
}
}

IEnumerator TextureFromURL( Action callback)
{
yield return null;
callback();
}

关于c# - Action 回调与 for 循环冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33803377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com