, Dexter wrote

I think the biggest mistake was the initial release of C# without generics. The traces of the old, non-generic, interfaces, delegates, collections etc. are visible to this day in both user written code and the .NET Framework library.

Of course, this isn't stricly about C# as the runtime itself didn't support generics at that time...

I don't know, the non-generic things like ArrayList and non-typed collection interfaces are useful, so the only problem is the inconsistency in naming (e.g. why isn't it ArrayList<T> instead of List<T> ?) and also namespaces (it would be better if the generic collection types were under System.Collections rather than System.Collections.Generics).