Conseguir información de un Objeto y de un método con Expresiones Lambda.

En algún momento en nuestra vida de programador, vamos a necesitar extraer el nombre de la clase de algún objeto o de un método. Es ahí donde estos 2 métodos nos pueden ayudar. El primero recibe un objeto y extrae el nombre de la clase:
protected string GetClassName( Expression<Func<object>> classToTest )
{
       string className = classToTest.Body.Type.Name;
       //Add something interesting!

       Return className;
}
Y para llamarlo usaremos la siguiente sintaxis:
public class SomeClass
{
         public int SomeMethod( object value )
         {
               string name=this.GetClassName( ( ) => this );
         }
         // Other Methods ...
}
Nuestro segundo método, recibe un método, que no tiene parámetros y obtiene su nombre y clase a la que pertenece:
protected string GetMethodName( Expression<Action> methodToTest )
{
        string className = ( methodToTest.Body as MethodCallExpression )
                            .Method.DeclaringType.Name;
        string methodName = ( methodToTest.Body as MethodCallExpression ).Method.Name;
        return methodName;
}
Para llamar al metodo usaremos la siguiente instruccion:
GetMethodName( ( ) => this.AMethod( ) );
Espero que les sirva
Suerte!.

Comentarios

  1. Hay una forma más fácil para un método:

    Console.WriteLine(((Action)Test).Method.DeclaringType.Name);

    static public void Test()
    {
    }

    Lo importante aquí es castear el método a un tipo Delegado (Action/Func) o lo que sea.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Conectarse a un Web Service en PHP con WPF

Ejecutar comandos en el CMD de Windows desde C#

Usar Log4Net en un proyecto ASP.NET MVC