There is absolutely no difference between the two when it comes to what you can do in code. Your choice of each will have to depend on personal need. They both use virtually the same .NET Libraries. There are no vb.NET library files that are omitted in C#.
As for which is better, none.
As for which is easier, depends on your background. Someone with a Java background would find C# easier to learn but someone who is not from all that or even from a Cobol background might find Vb.NET easier to learn. C# is similar to Java mostly in structure/syntax but when it comes down to it, the same class files available to a developer who codes C# is available to the one who codes VB.NET and so they can both create the same powerful applications using either language. I have never seen any code written in, say, C# that can not be translated easy to VB.NET, neither have I ever come across code written in VB.NET that can not be converted to C#.
When it comes to which is more widely used or more profitable on pay rate, that again depends on where you live and what information the employers in your area are privy to. Most employers hear from others or read of wonderful things someone was able to code in one language and they automatically assume that language is better than the others. In reality, that is all just rubbish. You can actually get away with writing the core of your code in one language, compiling it and then using it with the other language later on in another project. That is one of the multi-language selling points of the whole .NET platform idea.
http://codebetter.com/blogs/darrell.norton/archive/2003/07/07/382.aspxVB.NET vs C#: The Great .NET Language Debate
An email concerning .NET Languages prompted this reply from me:
I used to be a heavy VB.NET basher. I've been reading a lot on this issue lately (Introduction to .NET languages, VS.NET and Extending VS.NET, It's the Runtime Stupid, and Sam Gentile's Blog in general, among many others), I've seen the light (or maybe the darkness, who knows which?), and I am officially reversing my previous position.
It doesn't matter how much any given language diverges, it all gets compiled to MSIL. In the end, it is all about the CLR, not the language. If you can program with the .NET Framework, you should be able to pick up the syntax to a language very easily, i.e. no more than a week to be productive. What was harder to everyone here: learning to use braces and semicolons, or learning to use (or even comprehend!) the vast reaches of the .NET Framework? If I consume or include a library application in my project, do I care what language it was written in?
Someone whom I work with was complaining about DotNetNuke, the open source portal program. He is using it for a web site he is creating. Even though he does not NEED to even touch the source code since the project is extensible through modules written in any .NET language, he was complaining that it was not in C#!!! Talk about looking a gift horse in the mouth!
As noted recently on .NET Weblogs by Roy Osherove, employers are still myopically requiring 2 years VB.NET. I applied to a job with this requirement and they turned me down because I had 2+ years C#! Do we (or should we even) have to explain that we have 2 years experience in .NET, and that the language does not matter? The author of the second response (below) has been reading a book recently, Essential .NET, Volume I: The Common Language Runtime, and it is an awesome book from what little I have seen online and in the bookstore. Anyway, I believe it is more important to study something like this book than it is to study a "pure" C# or VB.NET book.
Finally, in the grand scheme of things, using *any* .NET language is far better than using, say, Pascal, Assembly, or some other earlier-generation language.
The first response:
From what I've read about the future of C# as a language and the compiler enhancements it will get (e.g. generics, iterators, anonymous methods, etc.), I've also heard that VB.NET will get these as well (plus XML code commenting). If M$ would have kept these features exclusive to C#, then there would be more of a compelling reason to stay with C# . Either way, like you point out, you're going to end up with nearly identical MSIL code at compile time and, for the most part, the code will have little performance difference.
If you really want to get into truly advanced features and squeeze every last bit of power out of .NET, then you'd want to look at C++ and the managed extensions for .NET. Otherwise, in the grand scheme of things, it just doesn't matter one way or the other.
My recommendation for everyone is to tailor your resume to the job requirements. If they want two years VB.NET, say you have it. If they want two years C#, no problem. Just change the keywords as necessary (INFO: Differences Between Visual Basic .NET and Visual C# .NET). The only thing to be leery of if working in a VB.NET shop is that the developers tend to carry a *lot* of "baggage" from VB6 with them.
I agree completely. Part of the reason I initially championed C# over VB.NET is that having to rethink all of the syntax of a language induces you to rethink how you do everything in general. I think this helped my team a lot when we first moved to .NET. I see many hard-core VB6 programmers trying to do things the same way in .NET. This makes their adjustment so much more difficult. Things that used to be hard are easy. Things that used to be easy you can do a different way, which initially might seem difficult until you figure it out, and then it (usually) is as easy as before.
There was even a debate on this published recently in the MSDN magazine to help developers understand there is no need for such debate as in the end, it all comes down to what language you are more comfortable with and nothing more.