Getting the MethodBase.GetCurrentMethod() but without Parameters

711 Views Asked by At

I have a function

public void AddPerson(string name)
{
    Trace.WriteLine(MethodBase.GetCurrentMethod());
}

The expected output is

void AddPerson(string name)

But I wanted that the methodname outputted has no parameters in it.

void AddPerson()
2

There are 2 best solutions below

3
On BEST ANSWER

To do this reliably is going to be an issue, you are going to have to build it up i.e. return type, name, generic types, access modifiers etc.

E.g:

static void Main(string[] args)
{
   var methodBase =  MethodBase.GetCurrentMethod() as MethodInfo;
     
   Console.WriteLine($"{methodBase.ReturnType.Name} {methodBase.Name}()");
}

Output:

Void Main()

Pitfalls, you are chasing a moving target:

public static (string, string) Blah(int index)
{
   var methodBase =  MethodBase.GetCurrentMethod() as MethodInfo;
   Console.WriteLine(MethodBase.GetCurrentMethod());
   Console.WriteLine($"{methodBase.ReturnType.Name} {methodBase.Name}()");
   return ("sdf","dfg");
}

Output:

System.ValueTuple`2[System.String,System.String] Blah(Int32)
ValueTuple`2 Blah()

The other option is just regex out the parameters with something like this: (?<=\().*(?<!\)).

2
On

The GetCurrentMethod method returns a MethodBase object, not a string. Therefore, if you want a different string than what .ToString() for that returns, you can cobble together a string from the MethodBase properties or just return the Name property, like:

Trace.WriteLine(MethodBase.GetCurrentMethod().Name);