the property not new exist does current context check caracteristicas body c# reflection c#-6.0 nameof

property - nameof in c#



Usando nameof para obtener el nombre del método actual (3)

Han explorado, buscado y esperado, pero no pueden encontrar una respuesta directa.

¿Hay alguna forma en C # 6.0 para obtener el nombre del método actual usando nameof sin especificar el nombre del método?

Estoy agregando los resultados de mi prueba a un diccionario como este:

Results.Add(nameof(Process_AddingTwoConsents_ThreeExpectedRowsAreWrittenToStream), result);

Preferiría si no tuviera que especificar explícitamente el nombre del método para poder copiar y pegar la línea, un ejemplo que no funciona:

Results.Add(nameof(this.GetExecutingMethod()), result);

Si es posible no quiero usar Reflection.

ACTUALIZAR

Esto no es (como se sugiere) un duplicado de esta pregunta . Estoy preguntando si es explícitamente posible utilizar nameof sin (!) Reflexión para obtener el nombre del método actual.


No puedes usar nameof para lograr eso, pero ¿qué tal esta solución?

Lo siguiente no utiliza ninguna reflexión directa (como el nameof ) y ningún nombre de método explícito.

Results.Add(GetCaller(), result); public static string GetCaller([CallerMemberName] string caller = null) { return caller; }

GetCaller devuelve el nombre de cualquier método que lo llame.


Si desea agregar el nombre del método actual a la Lista de resultados, puede usar esto:

StackTrace sTrace= new StackTrace(); StackFrame sFrame= sTrace.GetFrame(0); MethodBase currentMethodName = sFrame.GetMethod(); Results.Add(currentMethodName.Name, result);

O puedes usar,

Results.Add(new StackTrace().GetFrame(0).GetMethod().Name, result);


Sobre la base de la gran respuesta de user3185569:

public static string GetMethodName(this object type, [CallerMemberName] string caller = null) { return type.GetType().FullName + "." + caller; }

El resultado es que puedes llamar a this.GetMethodName() cualquier lugar para devolver el nombre del método completamente calificado.