* functions not really being first-class citizens * great collection methods with LINQ, but why did they give them such weird names? (map = select, filter = where, reduce = aggregate?) * took them a while to come up with a great async model (async/await), so legacy c# asynchronous code can be hard to figure out at first
Just my opinion but it seems like more recent languages like Swift have done a better job implementing ideas from functional programming. It's still light years ahead of Java to me though.