Cómo pasar parámetros a un delegado (C#, VB) dentro de un bucle.
Tengo una función con un bucle
Sub KvmActionForEachVm(CN As MySqlConnection, SshClient As Renci.SshNet.SshClient, Action As Action(Of MySqlConnection, Renci.SshNet.SshClient, String, Integer))
Dim AdmVMList As List(Of AdmVM) = ReadAdmVMList(CN)
For Each One As AdmVM In AdmVMList
Try
Action.Invoke(CN, SshClient, One.Name, CInt(One.Id))
'por ejemplo: ParseVmConfig(CN, SshClient, One.Name, One.Id)
Catch ex As Exception
Console.WriteLine(One.Name & " : " & ex.Message)
Continue For
End Try
Next
SshClient.Disconnect()
End Sub
y varias funciones con la misma firma que pueden funcionar en un bucle como se muestra a continuación. Por supuesto, estas funciones requieren un nombre de VM correcto (One.Name) y un ID de VM (One.Id)
Sub ParseVmConfig(CN As MySqlConnection, SshClient As Renci.SshNet.SshClient, VmName As String, VmId As Integer)
....
End sub
Sin el bucle, normalmente paso delegados como parámetros de la misma manera
KvmActionForEachVm(CN, SshClient, Sub() ParseVmConfig(CN, SshClient, "", 0))
Pero en este caso estoy confundido.
Nota: Estoy utilizando NET Core 5.0 y esta es una captura de pantalla de mi aplicación con este problema.
Imagen: aquí
davy.ai
El problema parece estar relacionado con pasar un delegado como parámetro a la función KvmActionForEachVm. En este caso, el delegado que se está pasando utiliza un método anónimo, lo cual puede llevar a confusiones al depurar.
Una posible solución podría ser definir una función separada que encapsule la funcionalidad del delegado, y luego pasar esa función como parámetro en su lugar. Por ejemplo:
De esta manera, el delegado se puede nombrar y localizar fácilmente durante la depuración, y cualquier problema con la funcionalidad del delegado se puede abordar por separado de la función KvmActionForEachVm en sí.