Ok. I tabulated the vote that came in after I asked everyone to contribute. It took a lot longer than I expected since I got a total of 667 (aren’t I glad that isn’t 666) votes come in. Here are the final results. Of course, I can’t gaurantee anything based on this, but it is pretty fantastic information to hear about. Also, if you don’t see a certain option listed here feel free to ask why. The main reasons are that I might have felt it was subsumed by an existing item, it’s something we already have in VS2005, I didn’t understand what you were asking for (even after asking for clarification), or I just missed it :-). First off, here’s all the raw data:
|Edit&Continue||31||Better constraints for generics||10|
|Better support for nesting other languages in C#||23||Warnings for certain goto behavior||8|
|Better control over all code generation.||23||Better syntax for casting||8|
|handling of null events||22||Better mock object support||8|
|Tuples/Generic lists of variable length||22||Better thread debugging||8|
|Covariant return types||20||Delegates on properties||7|
|Expose the compiler with a managed API||19||Generate field/property/constructor/class/etc.||7|
|intellisense for indexers/conversions||18||Fix up usings||7|
|tell you when you’re using a disposable type unsafely||18||VI mode||6|
|Non-null types||17||Functions in module scope/Top level functions||6|
|C#=Vb||16||Better MSDN documentation||6|
|Error correction/spell checking||16||More flexible color schemes||6|
|Private backing store for properties||16||Better XML serializer||6|
|Automatic constructor stub generation:||15||Better support for chords/keybindings||6|
|Pre/postconditions||15||User filtered catch handlers||6|
|Static import of classes||14||Method scoped variables||6|
|support for checking enum values||14||VS macros in C#||5|
|const support||14||Find code duplication||5|
|Support for mixins||13||Read/Edit mode||5|
|Virtual operators/operators on interfaces/better operators||13||IntPtr operators||5|
|Nicer syntax for anonymous delegates||13||API For accesing the profiler from managed code||5|
|Expose the refactoring engine||12||No regions on interface implementation||5|
|inlined array syntax||12||Warnings for implicit vs explicit implementation||3|
|Managed Add-ins||12||Fix up doc comments when doing a refactoring||3|
|special constructs for asynchronous operation||12||Method virtual by default||3|
|Collapse all code comments||11||Support for method groups in doc comments||3|
|C-omega support||11||Expose formatting/colorization engine||3|
|Generic properties||11||Obfuscator Api||3|
|Attributes on local variables and code blocks||11||Simplified iterator syntax||3|
|Better control over completion list (sorting and filtering)||11||Schema for XML comments||3|
|First class generics||11||Global exception tracking||2|
|Better incremental find||10||More flexible interface implementation support||2|
|Better constraints for generics||10||Aspects||2|
In a nicer graph form, I’ve split it up into the 50% that have the most votes and the 50% that have the least votes. note: I’m pretty sucky at creating graphs, so if you have a better way to do it, feel free to take the data and create your own. Send it to me and I’ll put it up with these 🙂
One thing I learned: Never conduct a web poll by soliciting emails. It’s ridiculously time consuming to collect and tabulate all votes. It’s also error prone. I ended up printing out everything and checking things off one by one in order to make sure i didn’t miss any votes.
As part of the vote I asked people to tell me about things they didn’t want. I left out those results because there just weren’t many opposing votes. I’m guessing that that’s because, for the most part, everyone either wanted a feature or was just OK on it. The only features that really solicited any negative responses were some of the more controversial onces. Like E&C, C#=VB, virtual by default, and const support. However, there wasn’t (in my opinion) a significant negative view on these compared to the amount of positive/uncaring views on them.
Some things that suprised me about the results:
- I wasn’t expecting “Better support for nesting other languages in C#” to be so popular. I’m guessing that people are using regex’s, SQL statements and XML a lot and would like that to be a nicer experience.
- I didn’t realize how much people were annoyed with dealing with null events in C#. We didn’t do any work on this and I think that was a mistake given the simple things we could have done that would have made people happier here
- There were a lot of responses that talked about the IDisposable pattern was extremely important and how it was so easy to mis/forget the pattern. People really, really, wanted IDE support here.
- I was expecting more interest in “virtual by default”. That seems to be a very polarized issue that people have strong opinions on. I was surprised to get so few votes for it.
- Very few people wanted a global exception handler (i.e. events whenever any exception was thrown/caught). I was expecting that to be more popular as well.
Thanks very much for letting us know about all of this. It’s going to be really helpful in our future choices for C#!!