LINQ and Dynamic Typing
The biggest feature of C# 3 was LINQ technology. With C# 4, it looks like dynamic typing is going to steal the show. But can you use them together?
On the of core features to LINQ is extension methods. Extension methods allow common functional to be added to interfaces such as IEnumerable. Extension methods are essentially a compiler trick that uses all the locally imported namespaces combined with the variable's static type to determine the appropriate function to call. With dynamic variables, the variables type is not know until runtime. But by that time, information about which namespaces were imported are long gone.
Anonymous functions are also important for LINQ. Anonymous functions are statically compiled in C# to real functions using the context to determine what parameter types to emit. Without a known type, the compiler would have to emit parameters of type object only, something that it normally doesn't do.
Neither of these limitations are insurmountable. There is no reason why the compiler couldn't capture the compile-time context needed for determining which extension method to bind to. Likewise, it could emit anonymous functions of type object and resort to dynamic calls for method and property invocation. But languages evolve slowly, and according to Mads Torgersen there are no plans to address these limitations in C# 4.
You can find out more on the C# Future site.
No big deal
Basically, if the C# 4.0's dynamic typing features don't play too well with C# 4.0's OWN other features, it is really irrelevent: thats not even why dynamic typing is there in the first place. Besides, if you're playing with dynamic typing, you can just add the new method to the object to begin with, extension methods are almost redundant.
This is like the var keyword: lets not forget why these features are added in the first place. It isn't to make C# the new Ruby.
Re: No big deal
Personally, I shy away from most dynamic features and am looking forward to as much "bondage and discipline" as I can get from the new code contracts. But that doesn't mean there won't be a significant group of C# developers that embrace dynamic tying with open arms and leverage it to the hilt.
Shane Hastie on Distributed Agile Teams, Product Ownership and the Agile Manifesto Translation Program
Shane Hastie Apr 17, 2015