Вероятно, вам будет легче с вещами, если вы используете Linq
с помощью System.Linq;
Затем, в вашем l oop по отделу, примените in-line в предложении where, поэтому он получает только один
foreach (Department department in
departments.Where( d => d.Courses.Contains( drawnCourse)).FirstOrDefault()
{
// now you will only get here for the first department that matches
// and will exit out after that. If no day match, it wont even try
// another department.
}
. Часть (d =>….) подразумевается как
, пока я нахожусь в скобках предложения WHERE, есть переменная " d "представляет любой текущий отдел в списке. Теперь я могу сравнить это, и как только я доберусь до ПЕРВОЙ (или по умолчанию) записи, разрешите продолжить.
Должен быть только один отдел, с которым курс, вероятно, будет связан и выйдет сразу после это и даже не пытаться второй отдел.
Что касается вашего внешнего l oop из "allCourses", вам, вероятно, нужно пройти через индекс, начиная с позиции 0. Если вы удалите курсы из список, очевидно, будет сокращен. Но теперь, если вы удалите курс, на котором вы находитесь, вы не хотите увеличивать количество, потому что ваша новая запись «X» теперь соответствует тому, что было в индексе X + 1. Внимательно относитесь к тому, как, по вашему мнению, вы их обрабатываете.