【问题标题】:How to find function parameters如何查找函数参数
【发布时间】:2009-11-20 20:11:44
【问题描述】:

我需要记录十几个函数中的所有函数参数。

有没有办法以编程方式确定所有参数及其值(或至少它们的 .ToString() 值)?也许通过反射?

【问题讨论】:

    标签: reflection c#-2.0 function-parameter


    【解决方案1】:

    【讨论】:

    • 希望我可以两次投票,因为我觉得当前的两个答案都有价值,但我觉得这将提供一个实际的解决方案。
    【解决方案2】:

    据我所知,没有办法使用反射来动态列出和确定局部变量的值。您可以使用反射来获取有关方法参数的类型信息,但只能使用 声明的 类型 - 您无法自动获取有关实际参数的信息,因为反射元数据提供了有关方法定义的信息,而不是在运行时传递给它的特定值。

    但是,您可以这样做:

    static class Extensions
    {
        public static string GetTypeAndValue(this object obj) 
        { 
            return String.Format("{0}: {1}", obj.GetType().Name, obj.ToString()); 
        }
    }
    

    然后,在您要执行日志记录的每个方法中,执行类似

    的操作
    private void SomeMethodToBeLogged(string some_string, int some_int, bool some_bool)
    {
        Logger.Log(String.Format("SomeMethodToBeLogged({0}, {1}, {2})", 
            some_string.GetTypeAndValue(), 
            some_int.GetTypeAndValue(), 
            some_bool.GetTypeAndValue()));
    }
    

    【讨论】:

    • obj.GetType().Name 产生类型的名称,而不是变量的名称(这是我需要的)。
    • ... 是你拿不到的,除非你真的写代码来做,也就是记录变量名和它的值,或者让别人做,就像另一个答案一样这里关于 PostSharp。反射着眼于元数据、类等,而不是实际实例及其当前属性(如参数值等)
    猜你喜欢
    • 1970-01-01
    • 2016-05-26
    • 2014-07-07
    • 2011-03-23
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多