Montag, 10. Mai 2010

C#: LINQ und IEnumerable (non-generic)

Immer wieder falle ich darauf rein:
Da hat man eine Collection of Irgendwas, die man mal schnell mit einer Mengeoperation durchackern will, z.B. durchsuchen oder filtern. Zum Glück gibt's seit .NET 3.5 ja die tollen Extension Methods von LINQ. Also, simsalabim:
using System.Linq;
Und... nichts passiert :( . Intellisense zeigt mir trotzdem keine der Erweiterungsmethoden an. Warum? Tja... Da hat man es wohl mit einem Relikt aus den .NET 1.1-Zeiten zu tun, wie etwa CodeTypeMemberCollection oder DataColumnCollection. Diese Kameraden implementieren nur IEnumerable statt IEnumerable<>. Und ohne Typsicherheit keine typisierte Abfragerei, so einfach. Da hilft (beim ersten Mal hab ich echt lang danach gesucht) die Cast-Methode (die bekommen auch die untypisierten IEnumerables verpasst:

CodeTypeDeclaration type;
...
..
var member = type.Members.Cast<CodeTypeMember>().FirstOrDefault( t => t.Name == name );

Et voilà!

Keine Kommentare:

Kommentar veröffentlichen