C#使用反射获取params的值

标签 c# reflection

如何获取 parms 的值(在使用反射的循环中)。 在上一个问题中,有人向我展示了如何使用反射遍历参数。

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 Reflection of all method parameters


谢谢大家 - 在 Python、PERL 和 PHP 中这似乎很容易。
即使它可能不是反射,但如果我使用反射来获取字段名称,似乎会有一种简单的动态方法来根据名称获取值。 我还没有尝试过 AOP (Aspect Oriented Programming) 的解决方案。 这是其中一件事,如果我不能在一两个小时内完成,我可能不会做。

最佳答案

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

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));
    }
}

关于C#使用反射获取params的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1867482/

相关文章:

c# - .Net Core 自定义身份验证使用 Identity Server 4 的 API key

javascript - 将 AJAX 中的 javascript 请求发送到 C# 方法,无返回值、ASP.NET、MVC

c# - "Parameter is not valid"System.Drawing.Image.FromStream() 方法异常

c# - 从绑定(bind)源中过滤 ListView 项目

reflection - 神秘的类型断言失败?

c# - 在运行时将属性的属性从一个实例复制到另一个实例(不同类型)

c# - ServiceStack 将枚举值序列化为名称以外的字符串

.net - 加载程序集并在另一个应用程序域中对其类型应用谓词

对 Jetpack Compose 的反射(reflection)

html - 淡入并反射(reflect) CSS,不起作用