Ich der Gastschreiber
Erst einmal sollte ich mich vorstellen! Mein Name ist Dominic oder auch unter dem Pseudonym pilipu bekannt. Ich bin Dualer Student für Angewandte Informatik, seit einigen Jahren mit Pawel über das Internet sehr gut bekannt und so wie er arbeite ich mit DotNET. Er hat mich eingeladen hier auf seinem Blog Gastbeiträge zu schreiben und ab diesem Jahr versuche ich dies umzusetzen und den einen oder anderen Beitrag zu tippen, unter dem Gesichtpunkt: “Der Lehrling und DotNET”. So werde ich ich kurze HowTo’s zu verschiedensten Dingen zum Besten geben, die mir in meiner täglichen Arbeit mit DotNET die eine oder andere Stunde Kopfzerbrechen bereitet haben. Heute fange ich mit mit der Implementierung der Schnittstelle IEnumerable<T> an und wie man dies in nur 2 Zeilen bewerkstelligen kann. Dieses Thema hatte ich bereits auf meinem eigenen Blog vor ca. einem halben Jahr behandelt. Da dieser Post auf meinem Blog immer wieder aufgerufen wird, halte ich ihn auch hier für sinnvoll.
IEnumerable<T> in 2 Zeilen implementieren
Warum IEnumerable<T> implementieren? Die Schnittstelle IEnumerable<T> macht es möglich über die Klasse, die diese Schnittstelle implementiert, mit einer foreach-Schleife zu iterieren. Ein Beispiel dafür ist die DotNET-Klasse List<T>. List<T> implementiert auch das nicht generische Interface IEnumerable. Es ähnelt dem IEnumerable<T> Interface, jedoch unterscheidet es sich in einem ganz wichtigen Punkt: Da IEnumerable keine Typsicherheit bietet, ist es nicht möglich, LINQ-Abfragen auf Klassen zu schrieben, die dieses Interface implementieren. Deshalb lasse ich IEnumerable in diesem HowTo auch unbetrachtet und werde es auch nicht weiter erwähnen.
Um zu verstehen wie man IEnumerable<T> in nur 2 Zeilen implementieren kann, muss man verstehen wie dieses Interface tickt und was man tuen muss um es überhaupt zu implementieren. Für das Beispiel habe ich mir die generische Klasse GenericData<T> geschrieben, die ein Proberty enthält, ein Array vom generischen Datentyp TSource. Desweiteren besitzt die Klasse 2 Methoden, die wir implementieren müssen wenn die Klasse die Schnittstelle IEnumerable<T> implementieren möchte.
public class GenericData<TSource> : IEnumerable<TSource> { private TSource[] elements; public IEnumerator<TSource> GetEnumerator() { throw new NotImplementedException(); } IEnumerator IEnumerable.GetEnumerator() { throw new NotImplementedException(); } }