¿Por qué hay dos versiones completamente diferentes de Reverse for List e IEnumerable?

Para elList objeto, tenemos un método llamadoMarcha atrás().
Invierte el orden de la lista 'en su lugar', no devuelve nada.

Para elIEnumerable objeto, tenemos un método de extensión llamadoMarcha atrás().
Devuelve otro IEnumerable.

Necesito iterar en orden inverso a través de una lista, por lo que no puedo usar el segundo método directamente, porque obtengo una Lista y no quiero revertirla, solo iterar hacia atrás.

Así que puedo hacer esto:

for(int i = list.Count - 1; i >=0; i--)

O

foreach(var item in list.AsEnumerable().Reverse())

Lo encontré menos legible que si tuviera un IEnumerable, solo haga

foreach(var item in list.Reverse())

No puedo entender por qué estos 2 métodos se han implementado de esta manera, con el mismo nombre. Es bastante molesto y confuso.

¿Por qué no hay una extensión llamada BackwardsIterator () en lugar de Reverse () que funcione para todos los IEnumerables?

¡Estoy muy interesado por la razón histórica de esta elección, más que por el 'cómo hacerlo'!

Respuestas a la pregunta(3)

Su respuesta a la pregunta