You cannot compare a micro controller to a PC, as many people have pointed out, C# is an interpreted language, run within a framework, much like Java. C# at the moment is not as portable across platforms as Java or C++, as I guess this is down to demand! It will run on the 2 major operating systems, Windows and Linux (under Mono Project), I program frequently in Java, C / C++ and C#, They all have their strengths and they all have their weaknesses, noteably speed, but with modern processors, you dont really notice that much!
For cross platform GUI applications I would use Java, or C#, for time critical systems, just for sheer proven robustness I would choose C++, this is a fully compiled application, and because of it's close optimisations with assembler routines it is going to come out top trumps in a speed of execution test.
What you have to think, is the back end framework that runs your Java or C# App is probably written in C/C++ anyway, most operating systems are written in assembler and C/C++.
If you want to learn programming, learn C++, if you want to deploy something quickly use C# or Java, if you want to run something cross platform, and fully portable, use Java.
If you want to program a PIC micro, use C or assembler, most of the other language options with a few exceptions bloat the end assembler code and can use up valuable space.
There have been a few suggestions floating around, CCS C, MIKROC, C18, HITECH C.
Most are portable if you know the fuse settings and library representations of each compiler.
Wilksey