В первой попытке вы использовали IEnumerable<TableRow>
, созданный методом OpenXmlElement.Elements<T>()
, который перечисляет TableRow
экземпляров из коллекции ChildElements
вашего Table
. Эта коллекция ChildElements
вычисляется динамически, а экземпляры возвращаются с использованием yield return
. Это происходит, когда вы изменяете эту коллекцию ChildElements
, удаляя элементы
- , что означает, что вы нарушаете связь между детьми, их родителями и братьями и сестрами,
- , что означает, что вы не я не могу получить полный набор элементов
TableRow
, - , что означает, что вы не можете удалить экземпляры
TableRow
.
Однако, я думаю, вы сможете удалите первый TableRow
экземпляр.
Используя ToList()
, вы материализуете коллекцию TableRow
экземпляров и получите их все в отдельном List<TableRow>
. Таким образом, вы работаете с фиксированной коллекцией, а не с динамически вычисляемой, как вы go. И вот почему это работает.
Как правило, вы никогда не должны изменять коллекцию (например, удаляя элементы коллекции), которую вы перечисляете.