Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ


Choose your language

InfoQ Homepage News LINQ and Dynamic Typing

LINQ and Dynamic Typing

Leia em Português

This item in japanese


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.

Rate this Article


Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Community comments

  • No big deal

    by Francois Ward,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    This is really no big deal. The dynamic typing features of C# 4.0 or mostly for compatibility with other dynamic languages (working with objects that were not created in C#), and for COM interop.

    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

    by Jonathan Allen,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    I tend to agree with you, but we can't really know how people are going to use this stuff until it actually happens.

    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.

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p