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!.
Hay una forma más fácil para un método:
ResponderEliminarConsole.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.