gpt4 book ai didi

c# for 循环在 1 个循环后退出

转载 作者:行者123 更新时间:2023-11-30 20:21:10 24 4
gpt4 key购买 nike

在我的项目中,我尝试循环遍历值并调用它们的函数。调试时 Count 告诉我有 2 个值。我的函数在 DispatcherTimer 中运行

我在构造函数中的计时器:

DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(runSync);
dispatcherTimer.Interval = new TimeSpan(0, 0, syncTime);
dispatcherTimer.Start();

我的函数

private void runSync(object sender, EventArgs e)
{

//I can see the value of count is 2 when using break points
List<string> vals = repo.getRemovedAnswers();
for (int i = 0; i < vals.Count(); i ++ )
{
//i do something with the element in my database

// send back a confirmation that the delete is finished
repo.setAnswerDeleted(vals.ElementAt(i));
Console.WriteLine(i + " removed");
//
}
Console.WriteLine("syncing");

}

我的 repo 类中的函数 setAnswerDeleted,它是一个无效方法,因此不返回中断或任何东西。

 public List<String> getRemovedAnswers()
{
return _answersRemoved;
}

public void setAnswerDeleted(string uniqueIdAnswer)
{
_answersRemoved.RemoveAll( item => item == uniqueIdAnswer);

}

在日志中我可以看到循环在每个 dispatchtimer 周期运行并且 onyl 调用该方法 1 次,为什么当 count == 2 时 for 循环没有运行 2 次?

最佳答案

尝试以这种方式更改您的代码:

private void runSync(object sender, EventArgs e)
{
//I can see the value of count is 2 when using break points
List<string> vals = repo.getRemovedAnswers();
for (int i = vals.Count() - 1; i >= 0; i--)
{
repo.setAnswerDeleted(vals.ElementAt(i));
Console.WriteLine(i + " removed");
//
}
Console.WriteLine("syncing");

}

您的 for 迭代一次是因为您从列表中删除了该元素并将索引递增 1,但删除后的元素是之前的长度 - 1,因此下一次检查 vals.Count() 返回 1 并且您的索引为 1 .这样你的索引从1开始,第二步是0。

关于c# for 循环在 1 个循环后退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34599980/

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