Reputation: 451
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
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
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