在我的項目中,我嘗試循環使用值並在其上調用函數。調試Count時告訴我有2個值。我的功能在DispatcherTimer運行c#for循環在1個循環後退出
我在構造器:
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");
}
功能在我的回購類setAnswerDeleted,它是一種無效的方法所以沒有返回休息或任何東西。
public List<String> getRemovedAnswers()
{
return _answersRemoved;
}
public void setAnswerDeleted(string uniqueIdAnswer)
{
_answersRemoved.RemoveAll(item => item == uniqueIdAnswer);
}
在日誌中我可以看到環運行,每dispatchtimer週期和酮基調用該方法1的時候,爲什麼for循環沒有運行2倍時計數== 2?
'getRemovedAnswers()'是否有機會返回_answersRemoved;'?然後,您將從正在迭代的同一列表中刪除元素。 –
@AlexD它是,但它會改變vals的值嗎?它在不同的類dosnt它複製? –
@SvenB不,它是對同一個列表的引用。 –