nehme ich eine Klasse Testcollection haben, die verwendet wird, um Objekte vom Typ-Test zu halten und wird alsIEnumerable Hinzufügen <T> zur Klasse von Collection abgeleitet
public class TestCollection : CollectionBase
definiert Diese mich durch die Sammlung iterieren können entweder als
foreach(object o in collection)
...
oder
foreach(Test t in collection)
aber nicht erlaubt Ich möchte neue Linq-Abfragen verwenden.
Wenn ich die Definition der Klasse zu
public class TestCollection : CollectionBase, IEnumerable<Test>
und fügen Sie eine Methode
public new IEnumerator<Test> GetEnumerator()
{
foreach (Test o in this.List)
yield return o ;
}
dann Abfragen sind Linq ändern verfügbar.
jedoch diese neue Methode nicht nur für LINQ-Abfragen aufgerufen wird, sondern ist auch in der Legacy-Code (dh während des foreach (Objekt o in der Sammlung) und foreach (Test in Collection).
Gibt es genannt jede Unterschied zwischen der alten Art der Iteration durch die Sammlung und dieser neuen Art unter der Annahme, dass alle Elemente in der Auflistung vom Typ Test sind? Ich weiß, dass das Hinzufügen einer IEnumerator-Methode eine Ausnahme auslöst, wenn sie andere Typen als Test findet , aber ich möchte wissen, ob ich etwas übersehen habe
Nein; it * implementiert * es - als eine 'NotImplementedException' zu werfen. Iteratorblöcke sind für diesen Zweck in Ordnung. –
Das habe ich gemeint. – SLaks