I think its because of physical code size due to syntax.
I use both at work, and c# is definitely more compact, which makes it quicker and easier to read.
So here are some generic examples:
Dim i as Integer ' vb
int i; // c#
For very large projects, vb code will be several times larger than c# code, just because it is more verbose.
My biggest gripe with vb is this:
var x = isTrue ? notNullValue : nullValue; // c#
Dim x as MyObject = Iif(isTrue, notNullValue, nullValue) ' vb & fails
this is becuase iif is older, although it has been replaced by the following
Dim x as MyObject = If(isTrue, nutNullValue, nullValue) ' vb
there is more:
// C# switch
select (x) {
case AWESOME_ENUM_A:
case AWESOME_ENUM_B:
case AWESOME_ENUM_C:
case AWESOME_ENUM_D:
case AWESOME_ENUM_E:
case AWESOME_ENUM_F:
break;
default:
}
' vb switch
select x
case AWESOME_ENUM_A, _
AWESOME_ENUM_B, _
AWESOME_ENUM_C, _
AWESOME_ENUM_D, _
AWESOME_ENUM_E, _
AWESOME_ENUM_F:
case else:
end select
very often i see vb code exceed 100 columns, since not many vb coders break up their long lines.
so you will see the following more:
' vb switch - more commonly found in code
select x
case AWESOME_ENUM_A, AWESOME_ENUM_B, AWESOME_ENUM_C, AWESOME_ENUM_D, AWESOME_ENUM_E, AWESOME_ENUM_F:
case else:
end select
And another person brought up commenting: (this can be ignored since the ide helps you with them)
/*
Hello
Comment
*/
'
' Hello
' Comment
'
The biggest advantage is lambda and LINQ, vb syntax is horrible with it.
(x,y) => x + y; // c#
Function(x,y) x+y 'vb
// C# linq
var ret = from x in db
where x < y
select x;
' vb linq
Dim ret = From x In db _
Where x < y _
Select x
The c# versions are easier to read and type
The only advantage that vb has over c# is the following:
' vb with, only thing awesome about vb syntax
With someReallyLongNameVariable.Property.Nested
.a = someValue1
.b = someValue2
.c = someValue3
End With
// c# aww
someReallyLongNameVariable.Property.Nested.a = someValue1
someReallyLongNameVariable.Property.Nested.b = somevalue2
someReallyLongNameVariable.Property.Nested.c = someValue3
// but you can always to this, although it sort of breaks readability
var n = someReallyLongNameVariable.Property.Nested;
n.a = someValue1;
n.b = someValue2;
n.c = someValue3;