No opt-in policy for nullness (Maybe<T>), except for structs via Nullable<T> No opt-in policy for mutability (classes, structs) No recursive enumerations (datatype constructors) or pattern-matching No generic numerics No kind-system
Slow linq to objects, unsuitable for fundamentalists (iterators don't mesh well with recursive use/structures.) Partial classes and extension methods - not as holistically designed as one might wish
Symptoms of a 10 year old language and runtime.
Dispite all this it's still a great language.
PS - language doesn't need runtime just to support generics - look at Java. Bracha et al made generics via type-erasure (don't like it due to performance, but it shows its possible.)