Cómo: Crear una expresión lambda

Actualización: noviembre 2007

Una expresión lambda es una función sin nombre que evalúa una sola expresión y devuelve su valor.

Para crear una expresión lambda

  1. Dentro de un método, en cualquier situación en la que se pueda usar un tipo delegado, escriba la palabra clave Function, como en el ejemplo siguiente:

    Dim add1 = Function

  2. Entre paréntesis, directamente después de Function, escriba los parámetros de la función. Observe que no se especifica un nombre después de Function.

    Dim add1 = Function (num As Integer)

  3. Después de la lista de parámetros, escriba una sola expresión como cuerpo de la función. El valor de la expresión es el valor devuelto por la función. No se usa una cláusula As para especificar el tipo de valor devuelto.

    Dim add1 = Function(num As Integer) num + 1
    

    Se llama a la expresión lambda pasando un argumento de tipo entero.

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. También se obtiene el mismo resultado con el siguiente ejemplo:

    Console.WriteLine((Function(num As Integer) num + 1)(5))
    

Ejemplo

Las expresiones lambda se suelen usar para definir una función que se puede pasar como argumento de un parámetro cuyo tipo es Delegate. En el ejemplo siguiente, el método GetProcesses devuelve una matriz de los procesos que se ejecutan en el equipo local. El método Where de la clase Enumerable requiere un delegado de tipo Boolean como argumento. La expresión lambda del ejemplo se utiliza con ese propósito. Devuelve True para cada uno de los procesos que tienen solamente un subproceso, los cuales están seleccionados en filteredQuery.

Sub Main()

    ' Create an array of running processes.
    Dim procList As Process() = Diagnostics.Process.GetProcesses

    ' Return the processes that have one thread. Notice that the type
    ' of the parameter does not have to be explicitly stated.
    Dim filteredList = procList.Where(Function(p) p.Threads.Count = 1)

    ' Display the name of each selected process.
    For Each proc In filteredList
        MsgBox(proc.ProcessName)
    Next

End Sub

El ejemplo anterior es equivalente al código siguiente, escrito con la sintaxis de Language-Integrated Query (LINQ):

Sub Main()

    Dim filteredQuery = From proc In Diagnostics.Process.GetProcesses _
                        Where proc.Threads.Count = 1 _
                        Select proc

    For Each proc In filteredQuery
        MsgBox(proc.ProcessName)
    Next
End Sub

Vea también

Tareas

Cómo: Pasar procedimientos a otro procedimiento en Visual Basic

Conceptos

Los delegados y el operador AddressOf

Expresiones lambda

Introducción a LINQ en Visual Basic

Referencia

Instrucción Function (Visual Basic)

Delegate (Instrucción)

Enumerable