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)