(Disclaimer: This is just my opinion!)
I have more or less no opinion regarding mono but I have to say that C# is "Java done right" (especially the 4.0 and 4.5 version of C#).
I programmed Java for years and was quite happy with it. Last year I started programming C# (because I had to) and now I'm in love with it and really dislike Java and how some things are done there.
I believe that every programmer that _really_ used C# and Java would say the same.
Regarding why Microsoft hasn't switched everything to C#:
1. Probably because it's not that easy to rewrite the work of years (the same reason why there are still COBOL programs out there)!
2. They are probably smart enough to know that you should choose the right tool for the job. For example: If you need high performance you go with a low level language. If you don't care about performance and it's just a small piece of software use a scripting language, if you try to be platform independent you use a language that compiles to bytecode and run it in a VM, etc...