Generally speaking C# is a good language. I don't know what would be the worst things, but this is what I don't like.

  • More of the .NET thing, but the prefixing of the interfaces with "I". Just looks ugly to me, and I think it discourges use of interfaces when they really should be used (I don't see IList used so often, even though "List" is an implementation I've seen methods that only accept it).
  • As we were talking above, I think the collections in .NET are generally poorly designed.
  • The C++ syntax for class inhertence. It makes sense in C++ because there is no language distinction between interface and class. They should have taken Java's syntax for this.
  • Multiple language features that do similar (or even the same thing). One example: lambda vs anon functions.
  • LINQ-to-Objects. Some people seem to thing it looks fancy in code (I guess?), but I don't think it makes the code any clearer then a simple foreach loop (which tends to be faster anyway). See above also.