Second on the sane P/Invoke and interop in general... main reason why I jumped to .Net very early on. By comparison, every time I touch Java it feels like an exercise in frustration, though seems better since Maven.
I'd also say that MVC/Razor, etc is much nicer than the Java counterparts I've seen... though I tend to not be too idiomatic with it when I've used it, very nice. Razor is probably my all time favorite view engine, though harder to use outside a web context (emails).
The much less terse syntax for generics is another big one over Java... with Java, it feels like all you save by having generics is lost with the extra syntax and typing you have to do... for example the LINQ functions (I actually don't care for the syntax) in C# are great, and the lamda expression syntax is awesome too.
I haven't used F#, but every time I see an article, I think about how awesome it looks, and seems to be more approachable than some other FP languages. Although I took a diagonal step and do a lot of mostly functional JS these days (I like and work a lot in node's good use cases).
Oh, another one, the .Net docker containers are MUCH smaller than Java...
It surely feels strange to argue for .NET given how it started and how I also bashed it back in the early days, specially since my employer had access to early versions of it pre-1.0.
But nowadays is just feels better.
However Oracle is actually making the effort to improve the whole generics/JNI/AOT compilation story, but those improvements are only targeted for Java 10 and beyond, while .NET has those features today.
And Android developers are not going to get them anyway.
Yeah, interop was one of the things that .Net/C# got very right, very early on, of course the framework libraries themselves leveraged windows internals quite a bit early on, so it was very important. When .Net 3.5 came out is when, imho C# was pretty much done, in terms of language features, I mean there's been a few things since, but it was a joy to work with compared to anything else at 3.5.
I don't agree with everything they've done, and it continues to improve. I've been reaching for node.js far more often the past couple years than I have for .Net though. Being able to deploy on Linux has been a pretty significant requirement for a lot of things, and node allows really quick ramp-up, though there are too many "expert" JS devs that aren't.
I'm hoping to find an excuse to play around with VS Code and .Net core bits pretty soon... then again, I've been saying the same for rust and go for a while as well.
Ability to write SIMD code.
Real value types and ability to write almost C++ like code with structs and pointers, in case performance requires ask for it.
No JNI, rather developer friendly P/Invoke, RCW and C++/CLI for interoperating with native code.
No need to go fetch a VM plugin from somewhere, just to be able to debug the quality of machine code being generated.
Powerful desktop stack that is actually used.
F# is much better than Scala for those that enjoy ML languages and is available by default. No need to ask for permission to install it.
Ability to target the HoloLens, XBox, iOS and Android.