2014-02-05 14 views
0

您好我有這樣的代碼刪除列表數據的foreach

List<CQuizOccurrence> matchData = new List<CQuizOccurrence>(); 
foreach (CQuizOccurrence myQuizOccurrence in Global.quizOccurrences) 
{ 
    DateTime dtDatabase = (DateTime)myQuizOccurrence.occurred; 
    string dt = dtDatabase.ToString(); 
    if (dt == dateOccur) { 
     matchData.Add(myQuizOccurrence); 
    } 
} 

foreach (CQuizOccurrence myQuizOccurrence in matchData) 
{ 
    Global.quizOccurrences.RemoveAt(0); 
} 

我認爲代碼將能夠刪除「Global.quizOccurences」數據,但我這「DT == dateOccur」錯了,它只是簡單地刪除「Global.quizOccurences」索引0

如何糾正它,因爲我想(斜體&粗體文本)

+1

也許你只想'Global.quizOccurences.RemoveWhere(QO =>((DATETIME)qo.occurred)的ToString()== dateOccur);' – Blablablaster

+0

@Blablablaster我不能使用.removeWhere屬性...在框架4.0中可用嗎? – Neversaysblack

+0

認爲它應該是'RemoveAll(Predicate match)'http://msdn.microsoft.com/en-us/library/wdka673a(v=vs.110).aspx – Ric

回答

1

試圖改變這一行:

Global.quizOccurrences.RemoveAt(0); 

這樣:

Global.quizOccurrences.Remove(myQuizOccurrence); 
+0

忘記了...感謝您的正確 – Neversaysblack

3

RemoveAt()刪除指定索引處的項目。在你的情況下,你需要刪除符合特定條件的項目,而不是列表開始的項目。

var itemsToRemove = Global.quizOccurrences 
    .Where(q => q.occurred.ToString() == dateOccur) 
    .ToList(); 

foreach(var quizOccurrence in itemsToRemove) 
{ 
    Global.quizOccurrences.Remove(quizOccurrence); 
}