Pros:
- Superb IDE. Nowadays even without Resharper, which was a must have in my early C# days.
- Massive standard library and extensive documentation makes for a very productive development experience (especially backends).
- dotnet core was a huge leap forward in terms of dev tooling (sane cli, 3rd party integration) and framework flexibility (configurability in general, config by code instead of XML)
- Microsoft keeps adding language features copied from functional programming languages.
Cons:
- Enterprise culture is very pattern-centric and produces much boiler plate code. That's the main reason I want to move away from dotnet.
- Desktop apps are not cross-platform and I don't trust their newer stuff to deliver on that promise. The older WPF is outdated (e.g. no inbuilt support for "newer" features like async/await) because of their focus on Xamarin and MAUI or whatever new fad they come up with.
- Microsoft seems to swallow open source libs by integrating them or copies of them (e.g. Newtonsoft.Json) into the standard lib. I'm not sure if this is a good thing. I know I'm contradicting the "massive standard lib" pro from above. But here I'm thinking long-term.
- New language features are sometimes done half-assed for backwards compatibility. E.g. nullable reference types that are just syntax sugar instead of a proper maybe monad with language integration.