The answer is simple, C#'s primary strong point is developer productivity, not developer understanding.

 

For both C/C++ and Java you do need some true CS knowledge to code elegantly designed structure and powerful tools, Java is OO, as in serious OO, and most devs don't know OO until you see an elite European's Java code, it is completely object oriented, pure objects doing stuff to other objects, without exception.

C# can let you see your machine, with lots of verbose pain, unlike how a true machine language doesn't allow you to choose which level or spectrum of abstraction you see, you code the machine, not the runtime.

 

C# and VB are both bad CS learning languages, they are for workforce productivity only, and for ones who already understand execution flow.