For the past couple of weeks I've been learning to use C# using .NET in Windows and Mono in SuSe Linux, and I have to say that I find the language rather annoying. I've never been a big fan of Java, and C# is certainly nicer to use than Java because the library calls aren't all 1000 characters long, but I find all the contrivances required to obfuscate pointers to be incredibly cumbersome.
Keywords like ref and out appear to be largely redundant, for example. Properties like get and set are cool (and remind me of Visual Basic), but if I build a class with a regular member variable and then later decide to change it to a property, I have to recompile everything that interfaces with that class; it'd sure be nice if that were transparent. Furthermore, what's with switch statement case labels not automatically falling through? Stupid. Plus, main() has to belong to an object, but then its cluged to work similarly to in C/C++!
Overall, C# has a lot of unintuitive features that translate messily from C/C++ and generally don't make life easier. I can see why they may make garbage collection and array bounds checking easier, but I don't care how hard those are to implement! I'd rather have a clean, elegant programming language that didn't feel so ad hoc.