我有一個foreach循環,只有在'Valid'屬性設置爲true時才需要迭代。不幸的是,如果列表中的第一個項目的「有效」設置爲false,它將退出整個循環。帶有List對象屬性條件的foreach循環
有誰知道在foreach循環中使用條件的最佳方法?以下是我現在所擁有的。
foreach (var course in agentNewTraining.AllCoursesTaken.TakeWhile(c => c.Valid))
我有一個foreach循環,只有在'Valid'屬性設置爲true時才需要迭代。不幸的是,如果列表中的第一個項目的「有效」設置爲false,它將退出整個循環。帶有List對象屬性條件的foreach循環
有誰知道在foreach循環中使用條件的最佳方法?以下是我現在所擁有的。
foreach (var course in agentNewTraining.AllCoursesTaken.TakeWhile(c => c.Valid))
您可以使用Where
方法。
foreach (var course in agentNewTraining.AllCoursesTaken.Where(c => c.Valid))
您的代碼現在所做的是取元素,直到找到與條件不匹配的元素。例如,如果列表的第一個元素與謂詞不匹配,則會得到一個空集合。
上面的Eve答案是正確的。
我只想指出,如果您以更易讀的方式編寫代碼,則可以通過單步執行代碼輕鬆解決此問題。
var collectionToIterate = agentNewTraining.AllCoursesTaken.TakeWhile(c => c.Valid);
foreach (var course in collectionToIterate)
{
//...
}
您會立即看到collectionToIterate不符合您的預期。你不是「退出整個循環」,你只是沒有項目可以迭代。
您可以使用Where
代替:
foreach (var course in agentNewTraining.AllCoursesTaken.Where(c => c.Valid))
或使用if
語句檢查條件:
foreach (var course in agentNewTraining.AllCoursesTaken) {
if (course.Valid) {
...
}
}