【问题标题】:Get Current Method Name获取当前方法名称
【发布时间】:2016-03-13 10:16:20
【问题描述】:

我想知道当前被调用的处理程序的名称。

MethodInfo.GetCurrentMethod().NameMethodBase.GetCurrentMethod().Name 在调试模式下工作正常。

但是一旦我混淆(使用 confuserEx)我的项目,这 2 个函数就会返回 "System.Reflection.MethodBase ()"

我注意到我可以使用以下行获取函数的名称: ((RoutedEventHandler)this.MyMethodName).GetMethodInfo().Name

它返回"MyMethodName",这是预期的结果。

但它根本不是通用的。当我不知道当前方法的名称时,我想要一段代码。

【问题讨论】:

  • 如果没有其他帮助,涉及源代码预处理器的解决方案是否可以接受?
  • @Thomas, Yahya:不相信这是重复的,因为没有一个链接的问题具体提到了为使其对代码混淆具有鲁棒性而引入的困难。
  • @O.R.Mapper 删除了它。
  • 如果 OP 在 4.5 上,[CallerMemberName] 是否解决了混淆问题? @O.R.Mapper

标签: c# methods


【解决方案1】:

here所述:

调用者信息值在编译时作为文本发送到中间语言 (IL)。与 StackTrace 属性的异常结果不同,结果不受混淆的影响。

因此,您可以尝试从您的方法中调用以下方法:

public string GetCaller([System.Runtime.CompilerServices.CallerMemberName] string memberName = "")
{
     return memberName;
}

【讨论】:

  • 是的,它正在工作,感谢@O,我正在尝试这个解决方案。 R. Mapper,谢谢你们的解决方案:)
猜你喜欢
  • 2011-01-04
  • 2010-10-01
  • 2010-09-19
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
  • 1970-01-01
相关资源
最近更新 更多