获取MethodBase.GetCurrentMethod()但不带参数

时间:2018-10-25 00:43:13

标签: c# system.reflection methodbase

我有一个功能

didUpdateUserLocation

预期输出为

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

但是我希望输出的方法名中没有参数。

void AddPerson(string name)

2 个答案:

答案 0 :(得分:3)

要可靠地执行此操作将是一个问题,您将需要构建它,即返回类型,名称,泛型类型,访问修饰符等。

例如

static void Main(string[] args)
{
   var methodBase =  MethodBase.GetCurrentMethod() as MethodInfo;

   Console.WriteLine($"{methodBase.ReturnType.Name} {methodBase.Name}()");
}

输出

Void Main()

陷阱,您正在追踪移动的目标

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

输出

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

另一个选择是使用类似(?<=\().*(?<!\))

的参数来正则表达式

答案 1 :(得分:-1)

GetCurrentMethod方法返回一个MethodBase对象,而不是字符串。因此,如果您想要的字符串与返回的.ToString()不同,则可以将MethodBase属性中的字符串拼凑在一起,或者只返回Name属性,例如:

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