es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Extraiga el nombre de un método pasado como parámetro de acción.

Tengo un método principal llamado ExecuteMethod en C# que se encarga de ejecutar el método pasado como parámetro. Ahora me gustaría hacer un registro en un archivo para saber qué método se está ejecutando cada vez (solo me interesa obtener el nombre del método):

public static void ExecuteMethod(Action myMethod)
{
    ExecuteMethod(() => { myMethod(); return true; });
}

public static object ExecuteMethod(Func<object> myMethod)
{
    string myMethodName = <nombre_del_método>; // ¿Cómo puedo extraer el nombre del método aquí a partir del parámetro myMethod?
    MyLog.Write("Llamando a " + myMethodName);

    // más cosas aquí
}

Por ejemplo, en mi programa tengo llamadas como las siguientes:

public void m1()
{
    ExecuteMethod(() => myCore.SomeMethod1(param1, param2));
}

public void m2()
{
    ExecuteMethod(() => myCore.SomeMethod2(param1, param2, null));
}

Luego, desde el método ExecuteMethod de arriba, me gustaría obtener los nombres de estos métodos pasados como parámetro, que serían SomeMethod1 y SomeMethod2 en este caso. ¿Cómo puedo lograr esto?</nombre_del_método>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para extraer el nombre del método del parámetro myMethod, puedes utilizar el método GetMethodInfo del delegado de método. Aquí te muestro cómo puedes modificar el método ExecuteMethod para lograr esto:

    public static object ExecuteMethod(Func<object> myMethod)
    {
        string myMethodName = myMethod.Method.Name;
        MyLog.Write("Llamando a " + myMethodName);
    
        // más código aquí
    }
    

    Al llamar a la propiedad Name del objeto MethodInfo devuelto por MyMethod.Method, puedes obtener el nombre del método y almacenarlo en la variable myMethodName con fines de registro.

Comments are closed.