Если я посмотрю на IL, созданный в Linqpad для двух следующих фрагментов кода, мне интересно, что здесь происходит.
В С#
int i = 42;
выводит следующий код IL
IL_0000: ret
тогда как в VB
Dim i As Integer = 42
это
IL_0000: ldc.i4.s 2A
IL_0002: stloc.0
По-видимому, компилятор С# понимает, что значение никогда не используется и, следовательно, просто ничего не возвращает. В VB.NET выполняется перевод фактического кода.
Это из-за различий в оптимизации компилятора или что-нибудь еще на работе?
Обновление: Просто для того, чтобы уточнить это. Я просто ввел эту строку в LinqPad и посмотрю на созданный ею IL (наиболее определенно, запустив соответствующий компилятор). Нет программы.