My biggest interest is in the lifespan of software and I simply cannot see C# providing here in place of C++. For a start, Microsoft has already started doing weird things with .NET Core and in my opinion not handling the *important* legacy baggage of the language gracefully at all. Try compiling a .NET 1.1 program using the latest implementation of .NET and you will likely encounter problems.
Also, a game engine needs to access the operating system (you cannot avoid this). As such you will need to access C or C++ libraries. My solution is to just use C or C++ then and get on with my work. However if you choose something like Java or C#, you will need bindings. This is glue between the native code and your .NET or Java virtual machine. Bindings are always terribly maintained and unless you write your own, you will be at the whims of these bindings.
We have all heard of the saying "make games, not engines" but going one step further I would say "make engines, not binding layers". And that for the most part means that C++ is the absolute best choice.
However, if you just want to make a game, have fun and maybe make a bit of money then move on. You cannot beat products like Unity. In which case just learn whatever [great|terrible] language they enforce on you and get to work! :)