Причина, по которой вы получаете ошибку, заключается в том, что вы используете цикл foreach. Если вы думаете о том, как работает цикл foreach, это имеет смысл. Цикл foreach вызывает метод GetEnumerator в списке. Если вы измените количество элементов в списке, то перечислитель, который содержит цикл foreach, не будет иметь правильное количество элементов. Если вы удалите элемент, возникнет ошибка с нулевым исключением, а если вы добавите элемент, цикл пропустит элемент.
Если вам нравятся выражения Linq и Lamda, я бы порекомендовал решение Дарина Димитрова, иначе я бы использовал решение, предоставленное Крисом Шмихом.