When I first started .NET programming (way back with 1.0b2 in November 2001) I chose C#. But before I chose it, it chose me. Let me explain.
My first .NET project came about as an accident - but a happy one. I had been asked by my customer to build an auto-registration system for the new portal I was building for them (SharePoint 2001 if you're curious). They told me that another organization had commissioned a similar auto-registration app for their portal (which I incidentally had helped design, build and deploy - if not the .NET piece of it). The app I was ultimately handed was written in C# - or at least part of it was.
This auto-registration app, written by Josh Wall (of MCS Federal), had a C# front-end and a VB5(6?) COM object on the back end to create AD accounts. Naturally I knew nothing about COM objects... and got error after error after error. I assumed it was my lack of understanding of .NET and C#... but I gradually figured out that COM was at fault for my errors (or rather my lack of understanding of COM). It took me a week. No help from Josh (the author), no training, no experience ever with .NET, no clue about COM objects, and I was working with a beta of the framework. Well, that's not quite true. I decided to make it harder and throw in RC1, even though the app had been written in b2. I know, I know - not real bright; but sometimes I relish a challenge. ;)
And it was a real challenge... especially since I was running on borrowed time. I was scheduled ~2mos... and here I was stumbling in the first week. I figured it out, only to realize that I really, really, really hated COM objects. I was so fed up that even though I had already figured it out - I decided to scrap it all declaring that COM was just total crap! How could anyone have ever used it? I decided right then to RE-WRITE the VB object in pure, sweet .NET.
So I analyzed the VB code of the COM object and attempted to port it to .NET. This of course wasn't easy either because the conversion wizard for VB to VB.NET gave me a few hundred errors leaving me with no choice but to convert it by hand. Now I had to remember VB from college and convert it to a brand new platform. Since the front-end was already using it, I chose C#. Once I had ported the object interface/api over to C#, I began talking to System.DirectoryServices.
Little did I know that System.DirectoryServices was apparently the bastard stepchild of the Framework. Though at RC1 (and I continued to watch it through 1.0) many, many pieces were farmed out to non .NET code... as if it had never been finished. It was a total kluge, and the namespace documentation was a mess. Many times the framework would simply make legacy ADSI calls... and sometimes I had to bypass the framework completely because some of it's calls weren't passed to ADSI correctly. Man, was that a frustrating month.
Anyway, back to my choice of language: C#. Because I had struggled for nearly a month plowing through COM, System.DirectoryServices and ADSI - all using C#, I decided that I shouldn't just throw away all of my experience with it (maybe it was growing on me). Besides I felt like if Microsoft was using C# internally, than it must be the language of choice going forward with .NET. It was a natural derivative of C++, while avoiding all of it's complexities (much like Java did - but C# had a much richer IDE in VS.NET as well as tighter platform integration in windows).
In any case, as an ASP programmer - I had always wanted to use JavaScript, but everywhere I went I walked into VBScript. Blah. Anyway that's my story, and I'm sticking to it.