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
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
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)
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))
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
Introducción a LINQ en Visual Basic