una trabaja tengo solo saber quiero puedo por personas persona pero nombre nada nacimiento internet fecha encontrar donde desaparecidas como buscar apellidos apellido c# .net reflection

c# - tengo - como saber donde trabaja una persona por su nombre



Cómo encontrar el nombre COMPLETO del método de llamada C# (5)

Con este método puede obtener de forma fiable el nombre completo

public void HandleException(Exception ex, [CallerMemberName] string caller = "") { if (ex != null) { while (ex.InnerException != null) ex = ex.InnerException; foreach (var method in new StackTrace().GetFrames()) { if (method.GetMethod().Name == caller) { caller = $"{method.GetMethod().ReflectedType.Name}.{caller}"; break; } } Console.WriteLine($"Exception: {ex.Message} Caller: {caller}()"); } }

¿Cómo puedo encontrar el nombre completo de un método de llamada en c #? He visto soluciones:

¿Cómo puedo obtener los métodos de llamada en C #

¿Cómo puedo encontrar el método que llamó al método actual?

Obtener el nombre de la función de llamada de la función llamada

Pero solo me dan el nivel superior. Considera el ejemplo:

namespace Sandbox { class Program { static void Main(string[] args) { test(); } static void test() { var stackTrace = new StackTrace(); var methodBase = stackTrace.GetFrame(1).GetMethod(); Console.WriteLine(methodBase.Name); } } }

Esto simplemente muestra ''Main''. ¿Cómo puedo imprimirlo ''Sandbox.Program.Main''?

Antes de que alguien comience a preguntar por qué necesito usar esto, es para un marco de registro simple en el que estoy trabajando.

EDITAR

Agregando a la respuesta de Matzi:

Aquí está la solución:

namespace Sandbox { class Program { static void Main(string[] args) { test(); } static void test() { var stackTrace = new StackTrace(); var methodBase = stackTrace.GetFrame(1).GetMethod(); var Class = methodBase.ReflectedType; var Namespace = Class.Namespace; //Added finding the namespace Console.WriteLine(Namespace + "." + Class.Name + "." + methodBase.Name); } } }

Produce ''Sandbox.Program.Main'' como debería


Creo que la mejor manera de obtener el nombre completo es:

this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name;

o prueba esto

string method = string.Format("{0}.{1}", MethodBase.GetCurrentMethod().DeclaringType.FullName, MethodBase.GetCurrentMethod().Name);

y si desea mostrar la llamada a la función más reciente, puede utilizar:

StackTrace st = new StackTrace(); StackFrame sf = st.GetFrame(0); var methodName = sf.GetMethod();

, pero si desea mostrar el árbol de funciones de llamada, puede hacerlo así:

if (st.FrameCount >1) { // Display the highest-level function call // in the trace. StackFrame sf = st.GetFrame(st.FrameCount-1); Console.WriteLine(" Original function call at top of call stack):"); Console.WriteLine(" {0}", sf.GetMethod()); }

para más info


En el método GetCurrentMethod System.Reflection.MethodBase , puede encontrar información completa sobre la pila de llamadas mediante clases, etc.


Esto es algo así como here .

MethodBase method = stackTrace.GetFrame(1).GetMethod(); string methodName = method.Name; string className = method.ReflectedType.Name; Console.WriteLine(className + "." + methodName);


espacio de nombres de llamada actual que no es igual al espacio de nombres actual

var mNamespace = new StackTrace().GetFrames()?.Select(x => { try { return x.GetMethod().ReflectedType?.Namespace; } catch (Exception) { return string.Empty; } }).First(x => x != new StackTrace().GetFrame(0).GetMethod().ReflectedType?.Namespace);