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!.

1 comentarios:

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.

Reply

Publicar un comentario