【问题标题】:Get the name of parameters from a calling method从调用方法中获取参数名称
【发布时间】:2013-03-04 15:49:20
【问题描述】:

我有一个使用 C# .NET 2.0 的项目(不能使用更高版本)。我想在第一个调用的方法中获取方法的参数名称。如果我从 MyMethodsClass 调用一个方法,我想接收一个字符串,指示哪个参数无效,遵循 MyCheckClass 类的 isValid 方法中指示的一些条件。

使用以下代码,我得到一个返回“请检查 5 参数”的字符串,以防我调用 myMehtod(5,1,1)。但我想获得,“请检查 a 参数”。

我怎么能这样做? 谢谢!

public MyMethodsClass {

    public string myMethod (int a, int b, int c) {

        return MyCheckClass.isValid(a,b,c);
    }

    public string myMethod2 (int d, int e) {
        return MyCheckClass.isValid(d,e);
    }

}


//Other file
public class MyCheckClass {

    public static string isValid (params object[] parameters) {

            StringBuilder result= new StringBuilder();          
            for (int i = 0; i < parameters.Length; i++)
            {
                object p = parameters[i];
                //Some checks...
                if (p == null || p.Equals("") || p != 5)
                {                    
                    result.Append("Please check the " + p + " parameter");
                }
            }
            return result.toString();               
    }
}

【问题讨论】:

  • 为了弄清楚这一点,如果 myMethod2 像这样调用 myMethod2(someValue, someOtherValue);您想要名称为“someValue”和“someOtherValue”。还是您想要方法签名中的“d”和“e”?
  • 我想要签名的名字,是的。比如:“请检查a参数”、“请检查d参数”

标签: c# .net


【解决方案1】:

【讨论】:

  • @Antonijn 这是 OP 想要的。请查看我对这个问题的评论以及他对此的反应
  • 是的,我想这就是我想要的。我要测试一下。谢谢:)
  • 恐怕这还不够。我无法在 params 数组中识别哪些参数映射到来自原始函数的哪些参数(例如,我可以接收 isValid(3,3,5),但在 isValid 方法中我不知道这 5 来自哪里。我可以获取原始参数名称,但不是对应的。
  • i 变量告诉您​​正在查看的参数。
  • 是的。谢谢雷蒙德。但乍一看,我不认为我可以有一些带有 7 个参数的 myMethod3 方法,它只用其中三个参数调用 isValid 方法,这种情况使它非常混乱,因为我无法知道它们中的哪一个是通过...我需要将映射变量名称及其值的 Dictionary 传递给 isValid 方法,这使得其他想要使用 isValid 方法的类更难使用...
【解决方案2】:

这两行应该可以为您完成工作,也许需要适应但应该可以工作^^

        MethodInfo info = typeof (MyMethodsClass).GetMethod("MethodName");
        string name = info.GetParameters()[indexOfTheFaultyOne].Name;

【讨论】:

  • @Antonijn 嗯,例子中amyMethod声明中形参的名称。在给出的示例中,该方法被称为myMethod(5,1,1),他想提取与参数5相对应的a
  • 为我工作。谢谢!
猜你喜欢
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 2016-10-21
  • 1970-01-01
  • 2016-02-03
相关资源
最近更新 更多