Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una expresión lambda es una función o subrutina que no tiene un nombre. Se puede usar una expresión lambda siempre que un tipo de delegado sea válido.
Para crear una función de expresión lambda de una sola línea
En cualquier situación en la que se pueda usar un tipo de delegado, escriba la palabra clave
Function
, como en el ejemplo siguiente:Dim add1 =
Function
Entre paréntesis, justo después de
Function
, escriba los parámetros de la función. Observe que no especifica un nombre después deFunction
.Dim add1 = Function
(num As Integer)
Después de la lista de parámetros, escriba una sola expresión como el cuerpo de la función. El valor al que se evalúa la expresión es el valor devuelto por la función . No se usa una
As
cláusula para especificar el tipo de valor devuelto.Dim add1 = Function(num As Integer) num + 1
Para llamar a la expresión lambda, pase un argumento entero.
' The following line prints 6. Console.WriteLine(add1(5))
Como alternativa, el siguiente ejemplo logra el mismo resultado:
Console.WriteLine((Function(num As Integer) num + 1)(5))
Para crear una subrutina de expresión lambda de una sola línea
En cualquier situación en la que se pueda usar un tipo de delegado, escriba la palabra clave
Sub
, como se muestra en el ejemplo siguiente.Dim add1 =
Sub
Entre paréntesis, justo después de
Sub
, escriba los parámetros de la subrutina. Observe que no especifica un nombre después deSub
.Dim add1 = Sub
(msg As String)
Después de la lista de parámetros, escriba una sola instrucción como cuerpo de la subrutina.
Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)
Para llamar a la expresión lambda, pase un argumento de cadena.
' The following line prints "Hello". writeMessage("Hello")
Para crear una función de expresión lambda de varias líneas
En cualquier situación en la que se pueda usar un tipo de delegado, escriba la palabra clave
Function
, como se muestra en el ejemplo siguiente.Dim add1 =
Function
Entre paréntesis, justo después de
Function
, escriba los parámetros de la función. Observe que no especifica un nombre después deFunction
.Dim add1 = Function
(index As Integer)
Presione ENTRAR. La instrucción
End Function
se agrega automáticamente.En el cuerpo de la función, agregue el código siguiente para crear una expresión y devolver el valor. No se usa una
As
cláusula para especificar el tipo de valor devuelto.Dim getSortColumn = Function(index As Integer) Select Case index Case 0 Return "FirstName" Case 1 Return "LastName" Case 2 Return "CompanyName" Case Else Return "LastName" End Select End Function
Para llamar a la expresión lambda, pase un argumento entero.
Dim sortColumn = getSortColumn(0)
Para crear una subrutina de expresión lambda de varias líneas
En cualquier situación en la que se pueda usar un tipo de delegado, escriba la palabra clave
Sub
, como se muestra en el ejemplo siguiente:Dim add1 =
Sub
Entre paréntesis, justo después de
Sub
, escriba los parámetros de la subrutina. Observe que no especifica un nombre después deSub
.Dim add1 = Sub
(msg As String)
Presione ENTRAR. La instrucción
End Sub
se agrega automáticamente.Dentro del cuerpo de la función, agregue el código siguiente para ejecutarse cuando se invoque la subrutina.
Dim writeToLog = Sub(msg As String) Dim log As New EventLog() log.Source = "Application" log.WriteEntry(msg) log.Close() End Sub
Para llamar a la expresión lambda, pase un argumento de cadena.
writeToLog("Application started.")
Ejemplo
Un uso común de expresiones lambda es definir una función que se puede pasar como argumento para un parámetro cuyo tipo es Delegate
. En el ejemplo siguiente, el GetProcesses método devuelve una matriz de los procesos que se ejecutan en el equipo local. El Where método de la Enumerable clase requiere un Boolean
delegado como argumento. La expresión lambda del ejemplo se usa para ese propósito. Devuelve True
para cada proceso que solo tiene un subproceso, y esos son los que se seleccionan en filteredList
.
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 siguiente código, que está escrito en la sintaxis de consulta Language-Integrated (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