Optimize o LINQ para IList

á um tempo atrás escrevi umIList método de extensão para enumerar parte de uma lista usando os índices. Durante a refatoração, percebi que uma consulta semelhante poderia ser realizada chamandoSkip(toSkip).Take(amount). Enquanto comparava isso, notei queSkip não está otimizado paraIList. Com um pouco de pesquisa, acabei no post de Jon Skeet,discussing por que otimizar métodos comoSkip é perigos.

Pelo que entendi o artigo, o problema não é exceção nos métodos otimizados quando a coleção é modificada, mas, como um comentário afirma, a documentação do msdn entra em conflit

Em IEnumerator.MoveNext ():

Se forem feitas alterações na coleção, como adicionar, modificar ou excluir elementos, o enumerador é irrecuperavelmente invalidado e a próxima chamada para MoveNext ou Reset lança uma InvalidOperationException.

Em IEnumerator.GetEnumerator ():

Se forem feitas alterações na coleção, como adicionar, modificar ou excluir elementos, o enumerador é irrecuperavelmente invalidado e seu comportamento é indefinido.

Vejo mérito em ambas as convenções e estou um pouco perdido ao otimizar ou não. O que é uma solução adequada? Eu estive pensando em umIList.AssumeImmutable() abordagem ao longo das linhas deAsParallel() como mencionado por Kris Vandermotten nos comentários. Já existe alguma implementação ou é uma má ideia?

questionAnswers(2)

yourAnswerToTheQuestion