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.)