Supongamos que tengo una TestCollection clase que se utiliza para mantener los objetos de tipo de prueba y se define comoAdición IEnumerable <T> a clase derivada de CollectionBase
public class TestCollection : CollectionBase
Esto me permite iterar a través de la colección, ya sea como
foreach(object o in collection)
...
o
foreach(Test t in collection)
pero no permite usar nuevas consultas de Linq
Si cambio de la definición de la clase a
public class TestCollection : CollectionBase, IEnumerable<Test>
y añadir un método
public new IEnumerator<Test> GetEnumerator()
{
foreach (Test o in this.List)
yield return o ;
}
continuación LINQ consultas están disponibles.
Sin embargo este nuevo método no se acaba de llamar para consultas LINQ, sino que también se denomina en el código heredado (es decir, durante el foreach (objeto o en la recolección) y foreach (Prueba de colección).
¿Hay alguna diferencia entre la forma antigua de iterar a través de la colección y esta nueva forma suponiendo que todos los elementos en la colección son del tipo Prueba. Soy consciente de que agregar el método IEnumerator hará que el programa arroje una excepción si encuentra otros tipos que no sean Test , pero quiero saber si he pasado por alto algo.
No; it * lo implementa * it - como lanzar una 'NotImplementedException'. Los bloques Iterator están bien para este propósito. –
Eso es lo que quise decir. – SLaks