c# 获得方法的调用者的调用者的类名,方法名等
1、返回当前方法所在的类名:usingSystem.Reflection;stingclassName=MethodBase.GetCurrentMethod().Ref...
1、返回当前方法所在的类名:
using System.Reflection;
sting className = MethodBase.GetCurrentMethod().ReflectedType.Name;
2、返回调用当前方法的方法名:
using System.Diagnostics;
using System.Reflection;
StackTrace trace = new StackTrace();
MethodBase methodName = trace.GetFrame(1).GetMethod();
以上方法是获得的是调用者 问题是我需要获得调用者的调用者或者一直往上找。
public static void getFileName()
{
string className = MethodBase.GetCurrentMethod().ReflectedType.Name;
StackTrace trace = new StackTrace();
MethodBase methodName = trace.GetFrame(1).GetMethod();
Console.Write(className+methodName.Name);
}
class Program
{
static void Main(string[] args)
{
SeleniumUtil.getFileName();
Console.ReadLine();
}
以上方法的需求是 我需要获得Program 类和方法名Main
求搞定 分数好说。 展开
using System.Reflection;
sting className = MethodBase.GetCurrentMethod().ReflectedType.Name;
2、返回调用当前方法的方法名:
using System.Diagnostics;
using System.Reflection;
StackTrace trace = new StackTrace();
MethodBase methodName = trace.GetFrame(1).GetMethod();
以上方法是获得的是调用者 问题是我需要获得调用者的调用者或者一直往上找。
public static void getFileName()
{
string className = MethodBase.GetCurrentMethod().ReflectedType.Name;
StackTrace trace = new StackTrace();
MethodBase methodName = trace.GetFrame(1).GetMethod();
Console.Write(className+methodName.Name);
}
class Program
{
static void Main(string[] args)
{
SeleniumUtil.getFileName();
Console.ReadLine();
}
以上方法的需求是 我需要获得Program 类和方法名Main
求搞定 分数好说。 展开
4个回答
展开全部
帮你写了一下,测试通过:
public class SeleniumUtil
{
public static void getFileName()
{
StackTrace trace = new StackTrace();
StackFrame frame = trace.GetFrame(1);
MethodBase method = frame.GetMethod();
String className = method.ReflectedType.Name;
Console.Write("ClassName:" + className + "\nMethodName:" + method.Name);
}
}
class Program
{
static void Main(string[] args)
{
SeleniumUtil.getFileName();
Console.ReadLine();
}
}
运行结果如下:
展开全部
你已经写出来了,只要略加判断就是了
trace.GetFrame(1).GetMethod();
这个括号里面的参数从0开始,0就是自己,1就是上一个,2就是上上一个3就是上上上一个
如果再上面没有了的话,就会返回一个异常字符串,你判断这个异常字符串是什么,就停止循环就好了
只要循环,不需要递归。
trace.GetFrame(1).GetMethod();
这个括号里面的参数从0开始,0就是自己,1就是上一个,2就是上上一个3就是上上上一个
如果再上面没有了的话,就会返回一个异常字符串,你判断这个异常字符串是什么,就停止循环就好了
只要循环,不需要递归。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.(new StackTrace()).GetFrame(1) // 0为本身的方法;1为调用方法
2.(new StackTrace()).GetFrame(1).GetMethod().Name; // 方法名
3.(new StackTrace()).GetFrame(1).GetMethod().ReflectedType.Name; // 类名
例子如下:
public static string GetMethodInfo()
{
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";
StackTrace ss = new StackTrace(true);
MethodBase mb = ss.GetFrame(1).GetMethod();
//取得父方法命名空间
str += mb.DeclaringType.Namespace + "\n";
//取得父方法类名
str += mb.DeclaringType.Name + "\n";
//取得父方法类全名
str += mb.DeclaringType.FullName + "\n";
//取得父方法名
str += mb.Name + "\n";
return str;
}
public static void Main()
{
Console.WriteLine(GetMethodInfo());
Console.ReadKey();
}
2.(new StackTrace()).GetFrame(1).GetMethod().Name; // 方法名
3.(new StackTrace()).GetFrame(1).GetMethod().ReflectedType.Name; // 类名
例子如下:
public static string GetMethodInfo()
{
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";
StackTrace ss = new StackTrace(true);
MethodBase mb = ss.GetFrame(1).GetMethod();
//取得父方法命名空间
str += mb.DeclaringType.Namespace + "\n";
//取得父方法类名
str += mb.DeclaringType.Name + "\n";
//取得父方法类全名
str += mb.DeclaringType.FullName + "\n";
//取得父方法名
str += mb.Name + "\n";
return str;
}
public static void Main()
{
Console.WriteLine(GetMethodInfo());
Console.ReadKey();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
string className = MethodBase.GetCurrentMethod().ReflectedType.Name;
看这行代码,就获得当前方法的类名,你如果也需要获得Program类的名称
有两种方法,
一种就是使用这行代码,写在Program类的函数里面,
第二种也用获得方法名一样的方式,获得调用者的调用者的类名
public static void getFileName()
{
StackTrace trace = new StackTrace();
string className = trace.GetFrame(1).GetMethod().ReflectedType.Name; MethodBase methodName = trace.GetFrame(1).GetMethod();
Console.Write(className+methodName.Name);
}
看这行代码,就获得当前方法的类名,你如果也需要获得Program类的名称
有两种方法,
一种就是使用这行代码,写在Program类的函数里面,
第二种也用获得方法名一样的方式,获得调用者的调用者的类名
public static void getFileName()
{
StackTrace trace = new StackTrace();
string className = trace.GetFrame(1).GetMethod().ReflectedType.Name; MethodBase methodName = trace.GetFrame(1).GetMethod();
Console.Write(className+methodName.Name);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询