I just browsed through the C# 3.0 Language Specification, and noticed something horrific. They are planning to support implicit typing, meaning that the following could become valid code (outside of JavaScript ;-):
var test1 = 1;
var test2 = 1.0;
var test3 = "test";
The above code initialises an int, a double and a string... I fail to see how this is not a "downgrading" of C#. I mean, it bothers me that this way is the "only" way in JavaScript! Why introduce it in a "third"-generation programming language? And, as another curiousity, the initialisation must occur as above (immediately), so that var test; test = "test"; is invalid.
Why give people the option to further confuse their own code? If you don't know what a variable will end up containing (review your code), use an object type.
[Listening to: Feel Good Inc. - Gorillaz - Demon Days (03:43)]