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
求搞定 分数好说。
展开
 我来答
泉海渔火
2013-05-29 · TA获得超过985个赞
知道小有建树答主
回答量:131
采纳率:0%
帮助的人:58.2万
展开全部

帮你写了一下,测试通过:

    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();
        }
    }

运行结果如下:

百度网友ce9f999
推荐于2017-11-25 · TA获得超过406个赞
知道小有建树答主
回答量:540
采纳率:100%
帮助的人:540万
展开全部
你已经写出来了,只要略加判断就是了
trace.GetFrame(1).GetMethod();
这个括号里面的参数从0开始,0就是自己,1就是上一个,2就是上上一个3就是上上上一个
如果再上面没有了的话,就会返回一个异常字符串,你判断这个异常字符串是什么,就停止循环就好了
只要循环,不需要递归。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiangjuan314
2016-01-06 · TA获得超过3.3万个赞
知道大有可为答主
回答量:2.9万
采纳率:0%
帮助的人:2770万
展开全部
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();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
seamaswong
2013-05-29 · TA获得超过1122个赞
知道小有建树答主
回答量:483
采纳率:0%
帮助的人:373万
展开全部
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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式