C# 获取调用函数 参数名称和值
来源:互联网 发布:淘宝模板图片素材 编辑:程序博客网 时间:2024/04/29 10:35
StackTrace stackTrace = new StackTrace(); ParameterInfo[] parameters = stackTrace.GetFrame(1).GetMethod().GetParameters();
如上代码在调用微软的API时,只能获取参数的名称,不能获取参数的值。
在网上找了一个用PostSharp工具来获取函数参数名称和值,经整理代码如下:
class Program { static void Main(string[] args) { string filePath = @"C:\log.txt"; if (File.Exists(filePath)) { FileStream fs = File.Create(filePath); fs.Close(); } Trace.Listeners.Add(new LogTraceListener(filePath)); Trace.Listeners.Add(new TextWriterTraceListener(Console.Out)); MyClass my = new MyClass(); my.MyMethod(44, "asdf qwer 1234", 3.14f, true); Console.ReadKey(); } } public class MyClass { public MyClass() { }#if DEBUG [Trace("DEBUG")]#endif public int MyMethod(int x, string someString, float anotherFloat, bool theBool) { return x + 1; } } [Serializable] public sealed class TraceAttribute : OnMethodBoundaryAspect { private readonly string category; public TraceAttribute(string category) { this.category = category; } public string Category { get { return category; } } public override void OnEntry(MethodExecutionArgs args) { Trace.WriteLine(string.Format("{2}----Entering {0}.{1}.", args.Method.DeclaringType.Name, args.Method.Name, DateTime.Now.ToString()), category); for (int x = 0; x < args.Arguments.Count; x++) { Trace.WriteLine(args.Method.GetParameters()[x].Name + " = " + args.Arguments.GetArgument(x)); } } public override void OnExit(MethodExecutionArgs args) { Trace.WriteLine("Return Value: " + args.ReturnValue); Trace.WriteLine(string.Format("{2}---Leaving {0}.{1}.", args.Method.DeclaringType.Name, args.Method.Name, DateTime.Now.ToString()), category); } } public sealed class LogTraceListener : TraceListener { public string FileName { set; get; } public LogTraceListener(string filename) { FileName = filename; } public override void Write(string message) { using (StreamWriter sw = new StreamWriter(FileName, true, Encoding.UTF8, Int16.MaxValue)) { sw.Write(message); } } public override void WriteLine(string message) { using (StreamWriter sw = new StreamWriter(FileName, true, Encoding.UTF8, Int16.MaxValue)) { sw.WriteLine(message); } } }
运行结果如图:
下载地址http://download.csdn.net/source/3540692
- C# 获取调用函数 参数名称和值
- JavaScript获取函数参数名称
- C#获取当前函数名称
- AspectJ 切面获取参数名称和参数
- PHP获取函数的调用者名称
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- Swift 函数参数标签和参数名称
- C#中循环获取枚举中的名称和值
- C#调用SQL存储过程以及返回值和参数的获取
- c# 获取桌面图标的位置和名称
- c# 获取Access 表名称和字段
- Scala 按名称参数调用函数 与 =>的用法
- Java获取函数参数名称的几种方法
- Java——通过反射获取函数参数名称
- Gnome快捷键
- Cocoa内存管理规则
- Firefox 快捷键
- N900词典解决方案
- 谷歌+摩托 大于苹果吗?
- C# 获取调用函数 参数名称和值
- POJ1797 dij的变形。
- VC连接Oracle数据库之ODBC及ADO
- 移动社交:妈妈都会用就是成功
- 科学家发现燃烧蜡烛中包含成千上万颗钻石微粒
- 华为笔试题,是java程序员的来做作吧--->含源代码哦!
- 【转载】【杂谈】女生嫁给电气工程师的10大好处!
- 如何做世界的领导者
- ubuntu下安装mentohost的deb包