Supponiamo che io sono un TestCollection classe che viene utilizzato per contenere oggetti di tipo di test ed è definito comeAggiunta IEnumerable <T> alla classe derivata da CollectionBase
public class TestCollection : CollectionBase
Questo mi permette di scorrere l'insieme sia come
foreach(object o in collection)
...
o
foreach(Test t in collection)
ma non consente io per usare nuove query Linq.
Se cambio la definizione della classe per
public class TestCollection : CollectionBase, IEnumerable<Test>
e aggiungere un metodo
public new IEnumerator<Test> GetEnumerator()
{
foreach (Test o in this.List)
yield return o ;
}
quindi LINQ query sono disponibili.
Tuttavia questo nuovo metodo non è solo chiamato per le query LINQ, ma è anche chiamato in codice legacy (cioè durante il foreach (oggetto o della raccolta) e foreach (Test in Collection).
C'è qualche differenza tra il vecchio modo di iterare attraverso la raccolta e questo nuovo modo assumendo che tutti gli elementi nella raccolta siano di tipo Test? Sono consapevole che l'aggiunta del metodo IEnumerator farà sì che il programma generi un'eccezione se trova qualsiasi altro tipo oltre a Test , ma voglio sapere se ho trascurato qualcosa
No; * lo implementa * come lancio di una "NotImplementedException". I blocchi iteratori vanno bene per questo scopo. –
Ecco cosa intendevo. – SLaks