лямбда-выражения в c # против vb.net - PullRequest
9 голосов
/ 20 января 2010

Функционально, есть ли какая-либо разница (кроме очевидного синтаксиса) между лямбда-выражениями в C # и VB.Net?

EDIT: продолжение ответа CraigTP: есть ли ссылки на ситуацию в .Net 4?

РЕДАКТИРОВАТЬ: Я спрашиваю, потому что я привык к C #, но для следующего проекта клиент спрашивает VB.Net.Мы не априори против этого.Мы понимаем, что большинство языковых конструкций поддерживаются на обоих языках.Однако нам особенно нравится, как C # реализует лямбда-выражения.Мы хотели бы получить обзор различий с VB.Net

РЕДАКТИРОВАТЬ: принял ответ CraigTP за указание того, что я считаю самым важным отличием.

Итак, подведем итог: VB.Net9 не поддерживает многострочные операторы в лямбда-выражении, и лямбда всегда должна возвращать значение.Обе эти проблемы рассматриваются в VB.Net 10

Ответы [ 5 ]

13 голосов
/ 20 января 2010

Нет никакой функциональной разницы, однако, как Джо Альбахари говорит в этом сообщении на форуме :

VB.NET нене поддерживает лямбда-выражения с несколькими утверждениями или анонимные методы.

Обратите внимание, что это основано на C # 3.0 и VB.NET 9.0 (т.е. версиях языков Visual Studio 2008) - яне уверен, применимо ли это к Visual Studio 2010 (C # 4.0 и VB.NET 10.0 соответственно).

РЕДАКТИРОВАТЬ:

В соответствии с моими комментариями Ричарда Сзэли и моими собственными комментариями,VB.NET 10.0 (который будет частью Visual Studio 2010) DOES поддерживает лямбды с несколькими утверждениями, и здесь есть ссылка на видео 9-го канала MSDN, демонстрирующее эту функцию (наряду со многими другими!):

Лучан Висчик и Лиза Фейгенбаум: что нового в Visual Basic 10

8 голосов
/ 20 января 2010

Лямбда-выражения в VB.NET (до 2010 года) должны возвращать значение.Например, следующий синтаксис был недопустим в VB.NET 9, но действителен в VB.NET 10 (код из блога Майка Макинтайра ):

Array.ForEach(numbers, Sub(n)
    Console.Write("Number: ")
    Console.WriteLine(n)
End Sub)
4 голосов
/ 20 января 2010

Правила вывода типов параметров обобщенного метода из неявно типизированных лямбда-аргументов довольно сильно отличаются в VB и C #.

Мы могли бы перечислять незначительные различия весь день;это, вероятно, пройдет быстрее, если вы поясните, почему вы спрашиваете.

4 голосов
/ 20 января 2010

Не вижу причин, по которым это может произойти, в конце дня все выражения будут выстроены в одну и ту же структуру объекта - используемую обоими языками под обложкой (по крайней мере, в самых новых версиях)

1 голос
/ 20 января 2010

Это также может быть хорошим чтением относительно небольших различий в использовании: Учебное пособие по Linq

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...