2010-01-20 32 views
9

Funcionalmente, ¿hay alguna diferencia (aparte de la sintaxis onbviously) entre las expresiones lambda en C# y VB.Net?expresiones lambda en C# vs. vb.net

EDITAR: seguimiento de la respuesta de CraigTP: ¿alguna referencia a la situación en .Net 4?

EDITAR: Estoy preguntando porque estoy acostumbrado a C#, pero para un próximo proyecto, el cliente pregunta a VB.Net. No estamos a priori en contra de eso. Nos damos cuenta de que la mayoría de los constructos de lenguaje son compatibles en ambos idiomas. Sin embargo, nos gusta especialmente la forma en que C# implementa expresiones lambda. Nos gustaría tener una visión general de las diferencias con VB.Net

EDIT: aceptó la respuesta de CraigTP para señalar lo que actualmente considero la diferencia más importante.

Por lo tanto, para resumir: VB.Net 9 no admite instrucciones de línea múltiple en una expresión lambda, y una lambda siempre debe devolver un valor. Ambas cuestiones se tratan en VB.Net 10

Respuesta

13

no hay diferencia funcional , sin embargo, como se dice en Joe Albaharithis forum post:

VB.NET no es compatible con múltiples instrucciones expresiones lambda o métodos anónimos.

Tenga en cuenta que esto se basa en C# y VB.NET 3.0 9.0 (es decir, el Visual Studio 2008 versiones de los idiomas.) - No estoy seguro de si todavía se aplica con Visual Studio 2010 (C# 4.0 y VB .NET 10.0 respectivamente).

EDIT:

Según Richard Szaley de mis propias observaciones y VB.NET, 10,0 (que será parte de Visual Studio 2010) HACE apoyo lambdas de múltiples instrucciones, y aquí hay un enlace a un 9 de vídeo MSDN Channel que muestra esta función (junto con muchos otros!):

Lucian Wischik and Lisa Feigenbaum: What's new in Visual Basic 10

+0

Expresiones lambda de múltiples capas son compatibles en VB.NET 10 –

+0

@Richard - Gracias por comentar. Tenía la sensación de que esto era algo que habían agregado a VB.NET 10.0 pero no estaba 100% seguro y no tenía el tiempo (en el momento de responder) para investigar completamente esto. – CraigTP

+1

Aquí hay un enlace a un video de MSDN Channel 9 que muestra el soporte de VB 10 para las lambdas de varias declaraciones (¡y muchas más funciones nuevas!): Http://channel9.msdn.com/posts/Dan/Lucian-Wischik-and- Lisa-Feigenbaum-Whats-new-in-Visual-Basic-10/ – CraigTP

4

No hay ninguna razón por la que habría, al final del día, todas las expresiones se construirán en la misma estructura de objetos, utilizada por ambos idiomas debajo de la cubierta (en menos con las versiones más recientes)

8

Las expresiones Lambda en VB.NET (anteriores a 2010) deben devolver un valor. Por ejemplo, la siguiente sintaxis era válida en VB.NET 9, pero es válida en VB.NET 10 (código de Mike McIntyre's blog):

Array.ForEach(numbers, Sub(n) 
    Console.Write("Number: ") 
    Console.WriteLine(n) 
End Sub) 
4

Las reglas para el método genérico tipo de parámetro inferencia de implícitamente mecanografiadas argumentos lambda son bastante diferente en VB y C#.

Podríamos mencionar pequeñas diferencias todo el día; esto probablemente iría más rápido si aclaras por qué estás preguntando.

+0

ver mi pregunta editada – jeroenh