Freigeben über


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!