登录C#时,如何学习调用当前方法的方法的名称?我知道所有这些System.Reflection.MethodBase.GetCurrentMethod(),但我想在堆栈跟踪中向下迈出一步.我考虑过解析堆栈跟踪,但我希望找到一种更清晰,更明确的方法,比如Assembly.GetCallingAssembly()方法.
__FILE__并且__LINE__众所周知.__func__自C99以来有一个.
#include <iostream>
struct Foo {
void Do(){ std::cout << __func__ << std::endl; }
};
int main()
{
std::cout << __func__ << std::endl;
Foo foo; foo.Do();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
将输出
main
Do
Run Code Online (Sandbox Code Playgroud)
是否有任何输出方法名称的宏/关键字Foo::Do?
所以.NET 4.5引入了CallerMemberNameAttribute,对于任何使用WPF并实现的人来说,这似乎是天赐之物INotifyPropertyChanged- 我的问题是:4.5 5.0编译器本质上是否绑定/支持该属性,还是更多的环境语法糖助手,就像人们可以通过声明ExtensionAttribute自己的神奇,打开LINQ语法来伪造Visual Studio一样?
编辑:(对不起Jon!)我想我是否可以CallerMemberNameAttribute通过在适当的命名空间中重新声明属性来"启用" .NET 4.0中的功能,就像在.NET中"启用"LINQ查询语法一样2.0通过适当的ExtensionAttribute类声明.我强烈的怀疑是不,自然......
换句话说:我想知道如果CallerMemberName不升级到.NET 4.5/5,我是否可以从中受益
希望这更清楚......
NinjaEdit#2:叹息......版本编号惯例令人困惑!