Agree. I have some beefs with the fragmentation of the framework though. I kind of hope that in the end we will end up with only two frameworks: mono on wasm for clients, and .net core for server/high performance clients.
But what is true is that there starts to be a lot of overlap and inconsistencies between multiple generations of the framework. You have object methods vs generics. You have async/callback methods vs async/await. You have ref/out returning methods vs valuetuple returning functions. etc. The language is starting to show its age even though the .net team has been adding to the syntax sparingly.
That's not really true, the list of features in each version is pretty tight and focused:
https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csh...