var runs = p.Elements<DocumentFormat.OpenXml.Wordprocessing.Run>()
.Reverse()
.Select(s=> new{run = s, props = wordPropertiesService.ExtractRunProperties(s, style) })
.ToList();
for (int i = runs.Count() - 1; i >= 0; i--)
{
var currentRun = runs[i];
var txt = currentRun.run.Elements<Text>().FirstOrDefault();
var equals = runs.TakeWhile(t =>
t.props.Equals(currentRun.props)
&& (t.run.Elements<Drawing>().FirstOrDefault() == null
&& t.run.Elements<Picture>().FirstOrDefault() == null)).ToList();
if(equals.Count > 2)
for(int e = equals.Count -2; e>= 0; e--)
{
if (equals[e].run.Elements<Text>().FirstOrDefault() != null)
txt.Text += equals[e].run.Elements<Text>().FirstOrDefault()?.Text ?? "";
runs.Remove(equals[e]);
}
//Собственно здесь после того как удалили из массива runs идентичные свойства
//в массиве runs остается 1 элемент (изначально было 4)
//index здесь равен 0
var index = runs.IndexOf(currentRun);
//удаляем из массива по индексу 0 1 элемент
// ии получаем вышеприведенную ошибку....
runs.RemoveAt(index);
}
for (int i = runs.Count - 1; i >= 0;)
if(runs.Remove(equals[e]))
i--;