需求
在C#中,有时候需要获取当前的方法名,类名,命名空间名和调用方法的堆栈等,比如在打印日志的场景,经常需要把当前的类名打印到日志中,有没有方法可以直接获取到这些名称呢。
当前代码的命名空间、类和方法名
C#获取当前代码的命名空间、类和方法名的示例代码如下:
public string Method()
{
string str = "";
//取得当前代码的命名空间
str += "命名空间名:" + System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Namespace + "\n";
//取得当前代码的类全名(包括命名空间)
str += "类名:" + System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName + "\n";
//取得当前方法名
str += "方法名:" + System.Reflection.MethodBase.GetCurrentMethod().Name + "\n"; str += "\n";
}
调用方法堆栈
C#获取调用方法的堆栈,主要通过Diagnostics类来实现,参考代码如下:
public void Method()
{
//父方法名
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace(true);
System.Reflection.MethodBase mb = st.GetFrame(1).GetMethod();
//取得父方法命名空间
str += mb.DeclaringType.Namespace + "\n";
//取得父方法类名
str += mb.DeclaringType.Name + "\n";
//取得父方法类全名
str += mb.DeclaringType.FullName + "\n";
//取得父方法名
str += mb.Name + "\n"; return str;
}
评论区