如标题所示:可以反射给您当前正在执行的方法的名称。
由于海森堡问题,我倾向于不这么认为。如何在不更改当前方法的情况下调用将告诉您当前方法的方法?但我希望有人能证明我错了。
更新:
最终结果
我了解了MethodBase.GetCurrentMethod()。我还了解到,我不仅可以创建堆栈跟踪,我还可以创建准确的框架,如果我需要的话。
若要在属性中使用此操作,只需使用.Substring(4)删除“set_”或“get_”。
发布于 2013-03-09 11:18:17
在.NET 4.5中,您还可以使用[CallerMemberName]。
示例:属性设置器(回答第2部分):
protected void SetProperty<T>(T value, [CallerMemberName] string property = null)
{
this.propertyValues[property] = value;
OnPropertyChanged(property);
}
public string SomeProperty
{
set { SetProperty(value); }
}编译器将在调用站点提供匹配的字符串文本,因此基本上没有性能开销。
发布于 2008-09-04 16:51:11
对于非async方法,可以使用
System.Reflection.MethodBase.GetCurrentMethod().Name;https://learn.microsoft.com/en-us/dotnet/api/system.reflection.methodbase.getcurrentmethod
请记住,对于async方法,它将返回"MoveNext“。
发布于 2008-09-04 17:18:09
Lex提供的片段有点长,所以我要指出重要的部分,因为没有其他人使用完全相同的技术:
string MethodName = new StackFrame(0).GetMethod().Name;这应该会将相同的结果返回给MethodBase.GetCurrentMethod().Name技术,但是仍然值得指出,因为我可以在它自己的方法中实现它一次,对前面的方法使用索引1,然后从许多不同的属性调用它。此外,它只返回一个框架,而不是整个堆栈跟踪:
private string GetPropertyName()
{ //.SubString(4) strips the property prefix (get|set) from the name
return new StackFrame(1).GetMethod().Name.Substring(4);
}这也是一条单线线;)
https://stackoverflow.com/questions/44153
复制相似问题