C#如何获取被调用的方法的名称及参数列表?

微wx笑
Java领域优质创作者
博客专家认证
2011-11-13 09:29:31
如题,该功能主要是用于异常处理。

例如:
/// <summary>
/// 集中处理本类的方法中捕获的异常。
/// </summary>
/// <param name="e">一个Exception类型的对象。</param>
/// <param name="methodName">产生异常的方法名称。</param>
/// <param name="args">参数列表</param>
private static void handleException(System.Exception e, string methodName, ArgumentCollection args)
{
// 如果不使用传入参数的方式,
// 也就是去掉"string methodName, ArgumentCollection args"两个参数,
// 我在这里如何才参得到方法的名称以及参数列表?

Log.Save(e, methodName, args);
}
/// <summary>
/// 使用表示架构名称的指定字符串以及表示限制值的指定字符串数组返回此 System.Data.Common.DbConnection 的数据源的架构信息。
/// </summary>
/// <param name="collectionName">指定要返回的架构的名称。</param>
/// <param name="restrictionValues">为请求的架构指定一组限制值。</param>
/// <returns>包含架构信息的 System.Data.DataTable。</returns>
public static DataTable GetSchema(string collectionName, string[] restrictionValues)
{
DataTable dt = new DataTable();
try
{
……
}
catch (Exception ex)
{
// 现在的处理方法是:在方法中定义参数列表,传到处理方法中
ArgumentCollection args = null;
if (LogType != LogType.None)
{
args = new ArgumentCollection();
args.Add(new Argument("collectionName", collectionName.GetType(), collectionName));
args.Add(new Argument("restrictionValues", restrictionValues.GetType(), restrictionValues));
}
// 这里直接传入方法名称和参数列表
handleException(e, "GetSchema", args);
}
return dt;
}
...全文
1565 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
本拉灯 2014-02-04
  • 打赏
  • 举报
回复


static void a2()
        {
            StackFrame frame = new StackFrame(1);       //偏移一个函数位,也即是获取当前函数的前一个调用函数
            MethodBase method = frame.GetMethod();      //取得调用函数
            Console.WriteLine(method.Name);  //a1
        }
 
        static void a1()
        {
            a2();
         }

直接
    static void a1()
    {
      string aa = MethodBase.GetCurrentMethod().Name;
      Console.WriteLine(aa);
    }
微wx笑 2011-11-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tsapi 的回复:]

用反射比较方便 Type.GetPropertities(); 属性 Type.GetMethods();方法。
[/Quote]

嗯,Type.GetMethods();方法 值得深入研究一下。以前只是简单的用用。
Daqing 2011-11-15
  • 打赏
  • 举报
回复
用反射比较方便 Type.GetPropertities(); 属性 Type.GetMethods();方法。
微wx笑 2011-11-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wnyxy 的回复:]

C# code

static void a2()
{
StackFrame frame = new StackFrame(1); //偏移一个函数位,也即是获取当前函数的前一个调用函数
MethodBase method = frame.GetMethod(); //取得调用函数
……
[/Quote]

StackTrace StackFrame 之类的都看过了,

只能得到方法名称,

但得不到方法有哪些参数,以及参数类型,当前调用传入的参数值
wnyxy001 2011-11-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wushuai1346 的回复:]
标记一下,对异常处理的问题很感兴趣,1#的方法很牛逼,能不能贴出参考资料的地址啊?
[/Quote]
MSDN
wushuai1346 2011-11-13
  • 打赏
  • 举报
回复
标记一下,对异常处理的问题很感兴趣,1#的方法很牛逼,能不能贴出参考资料的地址啊?
Flashcom 2011-11-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wnyxy 的回复:]

C# code

static void a2()
{
StackFrame frame = new StackFrame(1); //偏移一个函数位,也即是获取当前函数的前一个调用函数
MethodBase method = frame.GetMethod(); //取得调用函数
……
[/Quote]
呵呵,我还不知道有这样的方法,收下了
wnyxy001 2011-11-13
  • 打赏
  • 举报
回复

static void a2()
{
StackFrame frame = new StackFrame(1); //偏移一个函数位,也即是获取当前函数的前一个调用函数
MethodBase method = frame.GetMethod(); //取得调用函数
Console.WriteLine(method.Name); //a1
}

static void a1()
{
a2();
}

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧