首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以使用反射查找当前正在执行的方法的名称?

是否可以使用反射查找当前正在执行的方法的名称?
EN

Stack Overflow用户
提问于 2008-09-04 16:45:35
回答 18查看 72K关注 0票数 214

如标题所示:可以反射给您当前正在执行的方法的名称。

由于海森堡问题,我倾向于不这么认为。如何在不更改当前方法的情况下调用将告诉您当前方法的方法?但我希望有人能证明我错了。

更新:

  • 第2部分:这是否也可以用于查看属性的内部代码?
  • 第3部分:表演会是什么样子?

最终结果

我了解了MethodBase.GetCurrentMethod()。我还了解到,我不仅可以创建堆栈跟踪,我还可以创建准确的框架,如果我需要的话。

若要在属性中使用此操作,只需使用.Substring(4)删除“set_”或“get_”。

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2013-03-09 11:18:17

在.NET 4.5中,您还可以使用[CallerMemberName]

示例:属性设置器(回答第2部分):

代码语言:javascript
运行
复制
protected void SetProperty<T>(T value, [CallerMemberName] string property = null)
{
    this.propertyValues[property] = value;
    OnPropertyChanged(property);
}

public string SomeProperty
{
    set { SetProperty(value); }
}

编译器将在调用站点提供匹配的字符串文本,因此基本上没有性能开销。

票数 133
EN

Stack Overflow用户

发布于 2008-09-04 16:51:11

对于非async方法,可以使用

代码语言:javascript
运行
复制
System.Reflection.MethodBase.GetCurrentMethod().Name;

https://learn.microsoft.com/en-us/dotnet/api/system.reflection.methodbase.getcurrentmethod

请记住,对于async方法,它将返回"MoveNext“。

票数 195
EN

Stack Overflow用户

发布于 2008-09-04 17:18:09

Lex提供的片段有点长,所以我要指出重要的部分,因为没有其他人使用完全相同的技术:

代码语言:javascript
运行
复制
string MethodName = new StackFrame(0).GetMethod().Name;

这应该会将相同的结果返回给MethodBase.GetCurrentMethod().Name技术,但是仍然值得指出,因为我可以在它自己的方法中实现它一次,对前面的方法使用索引1,然后从许多不同的属性调用它。此外,它只返回一个框架,而不是整个堆栈跟踪:

代码语言:javascript
运行
复制
private string GetPropertyName()
{  //.SubString(4) strips the property prefix (get|set) from the name
    return new StackFrame(1).GetMethod().Name.Substring(4);
}

这也是一条单线线;)

票数 51
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档