When to not cast to Anonymous types

I was doing some tests on LINQ over DataTables where I was selecting into a new anonymous type. The code was quite simple, just doing a basic select.


var res = from n in contacts.Contact

   where n.LastName.StartsWith("L")

               select new {n};



Looking at the debugger, res is a WhereIterator, where the type that is being iterated over is the anonymous type that was created in the “select new {n}” portion of the LINQ query.


I then wanted to do something to each instance of the returned collection, which I would usually use a foreach statement for.


foreach (object o in res) {

            DoSomething(o.n); // error!



Of course, this works fine, but I don’t have access to the anonymous type’s member, which contains my data! After some thought and digging around, I realized that the key is to use the magical var type.


foreach (var o in res) {

            DoSomething(o.n); // Looks good!



Very excellent, you get the love of non-typed variables, all while having full type goodness. It's a great use for all those CPU cycles!

Comments (0)

Skip to main content