Currently it has three different ways of using event handlers.
The original way, anonymous delegates and lambdas.
The semantics of for loop which were fixed around C# 6.0, need to hunt down release notes for this one.
Something like .NET Native and .NET Core should have been there on v1.0 instead of tying the runtime to the OS.
What exactly changed with a for loop?
The runtime is different from the c# programming language. Originally when this all started, Windows was the focus and Linux/open-source were not an option, so saying it should be there from v1 doesn't fit when there was only one OS that it was planned to run on.
I got it wrong, it was foreach, not for.
The semantics for the variable were wrong when given into a closure, it was a breaking change in C# 5.0 to fix it.
https://www.jetbrains.com/help/resharper/AccessToForEachVari...
https://stackoverflow.com/questions/12112881/has-foreachs-us...
Thing is, there isn't just one version of Windows, and updating the CLR in place can be lots of fun, to the point many enterprise postpone it ad infinitum.
This was the original driving idea for .NET Core, when ASP team started doing it, making it easy to allow IT to update Windows production servers to newer versions, porting to other platforms came afterwards.
Are you stuck on .NET Framework? If you arent then .NET Core already solves all of the maintenance problems by being deployed completely self-contained. It's a similar problem with many other language toolchains as well and .NET Framework at least saves work by being a single install that can be automated away with group policies. Enterprises postponing software updates is a problem with the enterprise, not the framework.
So I have considered F#, but it doesn't seem that compelling. Also it seems like the tooling is worse on other platforms.
Quite competitive with msvs, if not better