That said, it locks you into using stuff like mono and stuff for cross platform which makes me a sad.
Microsoft's .Net Core runtime (now just .Net) has supported Linux and MacOS since 2016, so this information has been out of date for 7+ years.
https://devblogs.microsoft.com/dotnet/announcing-net-core-1-...
Being able to fix a bug without resetting memory state is a huge ergonomic advantage in game development where generating the right memory state can be incredibly complex and depend on a ton of very specific and hard-to-reproduce factors. Not to mention recompiling and restarting a game can be incredibly slow.
Visual Studio works with UE and calls that "Edit and Continue" and it works in C++, too.
If you're a AAA dev you give up a lot of that iteration because performance overtakes you, but there's little reason some indie 2d platformer will want to deal with even 30 second iteration times (which would be blazing quick for a AAA setup). C# is a mature, familiar environment for devs with similar syntax to C++ that can get decent performance as long as you maintain some discipline (for starters, no LINQ)
The standard libraries are still an allocation party, of course, but that can be supplemented in an engine context.