Adam Schiavone Adam Schiavone - 26 days ago 10
C# Question

How to find FULL name of calling method C#

How can I find the full name of a calling method in c#. I have seen solutions:

How I can get the calling methods in C#

How can I find the method that called the current method?

Get Calling function name from Called function in C#

But they only give me the top level. Consider the example:

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);
}
}
}


This simply outputs 'Main' How can I get it to print 'Sandbox.Program.Main'?

Before anyone starts asking why I need to use this, its for a simple logging framework that I am working on.

EDIT

Adding onto Matzi's Answer:

Here is the solution:

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);
}
}
}


Produces 'Sandbox.Program.Main' like it should

Answer

This is something like here.

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

Console.WriteLine(className + "." + methodName);
Comments