¿Cómo pasar una función como parámetro de un método en C#?

publicado por: Anonymous

Estuve tratando de esta manera:

public void agregarUC(Boolean IsNuevo, string metodoInsertar, string tipo)
    {
        if (IsNuevo == true)
        {
            DialogResult opc = MessageBox.Show("¿Realmente Desea Agregar Este " + tipo + "?", "Sistema Restaurante", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (opc == DialogResult.OK)
            {
                if (metodoInsertar == "OK")
                {
                    MessageBox.Show(tipo + " Insertado Correctamente", "Sistema Restaurante", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show(tipo + " Existente Actualmente", "Sistema Restaurante", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
        }
    }

Y lo llamo de Esta Manera:

FrmPrincipal.Instancia.agregarUC(ucCategoriaInsumo.Instancia.IsNuevo,insertarCategoriaInsumo(),"Categoria");

Es un método que retorna una cadena.
El problema radica en que siempre se ejecuta el método sea cual sea la respuesta que se le de al DialogResult.
Espero que puedan ayudarme gracias.

solución

Respondiendo la pregunta por partes, un ejemplo sencillo seria

public class Class1
{
    public int Method1(string input)
    {
        //... do something
        return 0;
    }

    public int Method2(string input)
    {
        //... do something different
        return 1;
    }

    public bool RunTheMethod(Func<string, int> myMethodName)
    {
        //... do stuff
        int i = myMethodName("My String");
        //... do more stuff
        return true;
    }

    public bool Test()
    {
        return RunTheMethod(Method1);
    }
}

Llevándolo al caso que presentas, seria algo como :

public void agregarUC(Boolean IsNuevo, Func<string, int> metodoInsertar, string tipo)
    {
      // ... do stuff
    }

Y se llamaría de la siguiente manera

FrmPrincipal.Instancia.agregarUC(ucCategoriaInsumo.Instancia.IsNuevo,insertarCategoriaInsumo,"Categoria");
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *