首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用反射法求参数的C#值

用反射法求参数的C#值
EN

Stack Overflow用户
提问于 2009-12-08 14:53:33
回答 7查看 37.3K关注 0票数 29

如何获得parms的值(在使用反射的循环中)。在前面的问题中,有人教我如何使用反射遍历parms。

代码语言:javascript
复制
static void Main(string[] args)
{
    ManyParms("a","b","c",10,20,true,"end");
    Console.ReadLine(); 
}

static void ManyParms(string a, string b, string c, int d, short e, bool f, string g)
{
    var parameters = MethodBase.GetCurrentMethod().GetParameters();
    foreach (ParameterInfo parameter in parameters)
    {
        string parmName = parameter.Name;
        Console.WriteLine(parmName); 
        //Following idea required an object first 
        //Type t = this.GetType();
        //t.GetField(parmName).GetValue(theObject));

    }
}

如果你一定知道我为什么要这么做,请看这里:所有方法参数的.NET反射

谢谢大家--在Python、PERL、PHP中,这似乎很简单。

即使它可能不是反射,如果我使用反射来获取字段名,似乎有一种基于名称的动态获取值的简单方法。我还没有尝试过AOP (面向方面编程)的解决方案。这是这样的一件事,如果我在一两个小时内做不到,我可能不会去做。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-12-08 17:24:47

您可以通过在方法中创建匿名类型并利用投影初始值来破解这一问题。然后,您可以使用反射查询匿名类型的属性。例如:

代码语言:javascript
复制
static void ManyParms(
    string a, string b, string c, int d, short e, bool f, string g)
{
    var hack = new { a, b, c, d, e, f, g };

    foreach (PropertyInfo pi in hack.GetType().GetProperties())
    {
        Console.WriteLine("{0}: {1}", pi.Name, pi.GetValue(hack, null));
    }
}
票数 41
EN

Stack Overflow用户

发布于 2009-12-08 14:55:21

基本上,你不能--至少在没有加入调试器/分析API的情况下是不行的。

理论上,StackFrame类可能有一些公开参数值的方法,但它没有--我怀疑要做到这一点,就必须删除几个优化。

票数 24
EN

Stack Overflow用户

发布于 2009-12-08 15:03:11

你考虑过使用AOP吗,比如PostSharp

它可以在方法执行之前访问参数值,从而将代码简化为可重用的属性类,以及应用于需要进行此检查的方法的属性。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1867482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档