I am pretty sure VB .NET was created solely so that users could transform VB6 code to VB .NET code. There were, at least in its infancy, a number of things that had no equivalence from VB to C# and vice-versa - but it has been a long time since I've used either, so that has probably been fixed by now.
The only reason that there is a lack of equivalence is that there are artificial language barriers presented by either one. For instance:
* VB did not initially have the concept of unsigned integers, an artificial limitation (like Java's).
* C# lacks the ability to declare a
raise handler for events (VB has RaiseEvent).
* VB lacks pointer support.
There's probably other stuff, but the bottom line is that everything is supported by the runtime. Everything is. Why not make them all support everything supported by the runtime? Because that would make them the same and raise a question as to the justification of two products that do the same thing.