gpt4 book ai didi

C# 在委托(delegate)中动态链接变量值的问题

转载 作者:行者123 更新时间:2023-11-30 22:08:53 25 4
gpt4 key购买 nike

我的游戏中有一个 GUI 设置代码,例如:

for (int i = 0; i < count; i++)
{
...
Button button = new Button();
...
button.handler = delegate { selectedIndex = i; };
gui.Add(button);
...
}

我想让按钮将 selectedIndex 更改为 i 的当前值,这是它的创建过程。 IE。 button0 将其更改为 0,button1 更改为 1 等等。但它看起来像是动态地将委托(delegate)中的值链接到 i 变量,并且所有按钮都将 selectedIndex 更改为 count + 1。如何解决?

最佳答案

您遇到了 common problem在匿名函数中捕获的内容。您正在委托(delegate)中捕获 i,并且该值会在循环过程中发生变化。

您需要 i副本:

for (int i = 0; i < count; i++)
{
int copy = i;
...
Button button = new Button();
...
button.handler = delegate { selectedIndex = copy; };
gui.Add(button);
...
}

请注意,foreach 循环在 C# 4 中有同样的问题,但在 C# 5 中,foreach 循环中的迭代变量在每次迭代中都是一个"new"变量。

关于C# 在委托(delegate)中动态链接变量值的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21986679/

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