If you are bilingual, or if you spend any time at all in the .NET blogosphere, you have undoubtedly witnessed many of the posts/discussions/arguments/wars over which language is better, C# or VB.NET. These skirmishes range from mild to violent, and are often filled with statements like "All VB.NET users are amateurs" or "All C# users are arrogant elitists." Much of the debate is filled with FUD, and at times it seems to border on a religious war.
Let me state right here that I have used both languages in a production environment, and I do not believe either language is objectively better than the other. Many of the arguments you see on the web come down to whether "If ... Then...End If" is better than "if(...){...}". Frankly, that is a ridiculous and pointless argument. There are pros and cons to using keywords or symbols, but in the end it comes down to personal preference. However, that does not mean that the languages are identical. There are in fact real differences between the languages beyond syntax that should be considered when choosing which one to use.
I am going to start a series of blog posts about the real differences between the languages. To start I will deal with the 2.0 versions of each language, and at the end I will explore some of the new features coming out in the 3.0 versions. Below is a partial list of the features that will be covered. If there are others that deserve to be covered, please leave a comment and let me know.
C# 2.0
Anonymous methods
Yield Return
C# 3.0
Collection initializers
VB.NET 2.0 (VB 8)
With...End With
Optional Parameters
Declarative Event Handling
Conditional Exception Handling
VB.NET 3.0 (VB 9)
???
Compilation differences
Visual Studio IDE differences