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.