One area of C# I would have liked to see them expand, that for some reason they just left stand, was Linq-2-SQL. It allowed for direct reflection against SQL, so I could be sure that strong typing was implicit in the Linq control surface to the DB. It also produced, for me, all the objects right off of the SQL reflection. Timesaving as heck!
Don't know why Linq kinda just stayed where it was. They spent more time on Presentation Foundation and Communication Foundation, when I feel the time would have been better-spent fleshing the Linq concept out more.
I haven't had much Linq/SQL experience. As I read it though it seemed pretty nice: especially the strong-typing on SQL. (Most of the C# maintenance stuff I do have their SQL in objects piped into the DB, then the results might be parsed/converted into integers or passed out as Strings… it works, for the most part, and the company doesn't want to refactor it.)
Generics are a big deal in C# too. It's great. I can toss objects around, wrapped in, say, a generic List<T> and do all sorts of manipulation. Handy.
True; I've used that myself once to refactor/greatly-simplify a "random-picker bound to a pool of values" (used Fisher-Yates to improve its runtime and make it repeatable/auditable) instead of the mess of repeated-random-picks that was originally there.
Generics are really great stuff; I found this paper on Ada 83's generic/package interaction that simply blew me away w/ its creative uses of generic's WRT packages.