Optimize LINQ for IList

A hace un tiempo escribí unIList método de extensión para enumerar a través de parte de una lista utilizando los índices. Mientras refactorizaba, me di cuenta de que se podía realizar una consulta similar llamando aSkip(toSkip).Take(amount). Mientras comparaba esto, noté queSkip no está optimizado paraIList. Con un poco de google terminé en una publicación de Jon Skeet,discutiendo por qué optimizar métodos comoSkip es peligros.

Hasta donde entiendo el artículo, el problema es que no se produce una excepción en los métodos optimizados cuando se modifica la colección, pero como un comentario indica que la documentación de msdn entra en conflicto.

In IEnumerator.MoveNext ():

Si se realizan cambios en la colección, como agregar, modificar o eliminar elementos, el enumerador se invalida irremediablemente y la próxima llamada a MoveNext o Reset arroja una InvalidOperationException.

In IEnumerator.GetEnumerator ():

Si se realizan cambios en la colección, como agregar, modificar o eliminar elementos, el enumerador se invalida irremediablemente y su comportamientoes indefinid.

Veo mérito en ambas convenciones, y estoy un poco perdido para optimizar o no. ¿Qué es una solución adecuada? He estado considerando unaIList.AssumeImmutable() enfoque a lo largo de las líneas deAsParallel() según lo mencionado por Kris Vandermotten en los comentarios. ¿Ya existe alguna implementación o es una mala idea?

Respuestas a la pregunta(2)

Su respuesta a la pregunta