rca*_*ron 5 .net c# reflection
我希望能够IDictionary<string, object>以前一个方法的形式获得一个参数列表.有一个问题:即使它是免费的,我也无法使用第三方面向方面编程框架.
例如:
using System;
using System.Collections.Generic;
using System.Diagnostics;
namespace Question {
    internal class Program {
        public static void Main(string[] args) {
            var impl = new Implementation();
            impl.MethodA(1, "two", new OtherClass { Name = "John", Age = 100 });
        }
    }
    internal class Implementation {
        public void MethodA(int param1, string param2, OtherClass param3) {
            Logger.LogParameters();
        }
    }
    internal class OtherClass {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    internal class Logger {
        public static void LogParameters() {
            var parameters = GetParametersFromPreviousMethodCall();
            foreach (var keyValuePair in parameters)
                Console.WriteLine(keyValuePair.Key + "=" + keyValuePair.Value);
                // keyValuePair.Value may return a object that maybe required to
                // inspect to get a representation as a string.
        }
        private static IDictionary<string, object> GetParametersFromPreviousMethodCall() {
            throw new NotImplementedException("I need help here!");
        }
    }
}
有什么建议或想法吗?如有必要,请随意使用反射.
您可以用来StackTrace获得您需要的一切:
var trace = new System.Diagnostics.StackTrace();
var frame = trace.GetFrame(1); //previous
var method = frame.GetMethod();
现在您有了一个MethodBase实例。
您可以通过以下方式获取名称:
var method = method.Name;
例如:
var dict = new Dictionary<string, object>();
foreach (var param in method.GetParameters())
{
    dict.Add(param.Name, param.DefaultValue);
}
| 归档时间: | 
 | 
| 查看次数: | 585 次 | 
| 最近记录: |