gpt4 book ai didi

c# - 如何避免捕获变量?

转载 作者:太空狗 更新时间:2023-10-29 20:50:46 25 4
gpt4 key购买 nike

我有问题

foreach(var category in categories)
{
foreach(var word in words)
{
var waitCallback = new WaitCallback(state =>
{
DoSomething(word, category);
});

ThreadPool.QueueUserWorkItem(waitCallback);
}
}

当执行 DoSomething 时,它会收到每个捕获变量的最新值,而不是我想要的值。我可以想象一个解决方案,但它想象你们可以想出更好的解决方案

最佳答案

解决这个问题的规范方法是将值复制到在循环内部声明的临时变量中。

foreach(var category in categories)
{
var catCopy = category;
foreach(var word in words)
{
var wordCopy = word;
var waitCallback = new WaitCallback(state =>
{
DoSomething(wordCopy, catCopy);
});

ThreadPool.QueueUserWorkItem(waitCallback);
}
}

关于c# - 如何避免捕获变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5717186/

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