2013-01-09 62 views
1

我有一個foreach循環,只有在'Valid'屬性設置爲true時才需要迭代。不幸的是,如果列表中的第一個項目的「有效」設置爲false,它將退出整個循環。帶有List對象屬性條件的foreach循環

有誰知道在foreach循環中使用條件的最佳方法?以下是我現在所擁有的。

foreach (var course in agentNewTraining.AllCoursesTaken.TakeWhile(c => c.Valid)) 

回答

6

您可以使用Where方法。

foreach (var course in agentNewTraining.AllCoursesTaken.Where(c => c.Valid)) 

您的代碼現在所做的是取元素,直到找到與條件不匹配的元素。例如,如果列表的第一個元素與謂詞不匹配,則會得到一個空集合。

1

上面的Eve答案是正確的。

我只想指出,如果您以更易讀的方式編寫代碼,則可以通過單步執行代碼輕鬆解決此問題。

var collectionToIterate = agentNewTraining.AllCoursesTaken.TakeWhile(c => c.Valid); 
foreach (var course in collectionToIterate) 
{ 
    //... 
} 

您會立即看到collectionToIterate不符合您的預期。你不是「退出整個循環」,你只是沒有項目可以迭代。

1

您可以使用Where代替:

foreach (var course in agentNewTraining.AllCoursesTaken.Where(c => c.Valid)) 

或使用if語句檢查條件:

foreach (var course in agentNewTraining.AllCoursesTaken) { 
    if (course.Valid) { 
    ... 
    } 
}