JP Dolocanog
JP Dolocanog

Reputation: 451

Getting the MethodBase.GetCurrentMethod() but without Parameters

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()

Upvotes: 1

Views: 980

Answers (2)

TheGeneral
TheGeneral

Reputation: 81493

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: (?<=\().*(?<!\)).

Upvotes: 3

Jacob
Jacob

Reputation: 78850

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

Upvotes: 1

Related Questions