Sí definitivamente.
Si desea manipular un objeto, en realidad uso una función como esta:
public static T CreateWrapper<T>(Exception innerException, params object[] parameterValues) where T : Exception, new()
{
if (parameterValues == null)
{
parameterValues = new object[0];
}
Exception exception = null;
StringBuilder builder = new StringBuilder();
MethodBase method = new StackFrame(2).GetMethod();
ParameterInfo[] parameters = method.GetParameters();
builder.AppendFormat(CultureInfo.InvariantCulture, ExceptionFormat, new object[] { method.DeclaringType.Name, method.Name });
if ((parameters.Length > 0) || (parameterValues.Length > 0))
{
builder.Append(GetParameterList(parameters, parameterValues));
}
exception = (Exception)Activator.CreateInstance(typeof(T), new object[] { builder.ToString(), innerException });
return (T)exception;
}
Esta línea:
MethodBase method = new StackFrame(2).GetMethod();
Recorre el marco de la pila para encontrar el método de llamada y luego usamos la reflexión para obtener los valores de información de parámetros que se le pasan para una función genérica de informe de errores. Para obtener el método actual, simplemente use el marco de pila actual (1) en su lugar.
Como otros han dicho para el nombre de los métodos actuales, también puede usar:
MethodBase.GetCurrentMethod()
Prefiero caminar por la pila porque si miras internamente ese método, simplemente crea un StackCrawlMark de todos modos. Dirigirme directamente a la Pila me parece más claro
Post 4.5 ahora puede usar [CallerMemberNameAttribute] como parte de los parámetros del método para obtener una cadena del nombre del método; esto puede ayudar en algunos escenarios (pero realmente, por ejemplo, en el ejemplo anterior)
public void Foo ([CallerMemberName] string methodName = null)
Esto parecía ser principalmente una solución para el soporte INotifyPropertyChanged donde anteriormente había cadenas sucias a lo largo de su código de evento.