如何在数组中获取方法参数?

时间:2012-01-05 13:47:43

标签: c#

想象一下,你在这个课程中得到了这个方法:

float Do(int a_,string b_){}

我正在尝试做这样的事情:

float Do(int a_, string b_)
{
  var params = GetParamsListOfCurrentMethod(); //params is an array that contains (a_ and b_)
}

有人可以帮忙吗?

我为什么要这样做?

想象一下,你有一个界面:

public Interface ITrucMuch
{
 float Do(int a_,string b_);
 // And much more fct
}

许多实现该接口的类

还有一个特殊的类,它也实现了接口:

public class MasterTrucMuch : ITrucMuch
{
  public floatDo(int a_, string b_) 
  {
    ITrucMuch tm = Factory.GetOptimizedTrucMuch(); // This'll return an optimized trucMuch based on some state
    if(tm != null)
    {
      return tm.Do(a_,b_);
    }
    else
    {
      logSomeInfo(...);
    }

    //do the fallback method
  }

由于接口占用了很多方法,并且因为所有方法的第一个连接总是相同的(检查当前实例是否有更好的接口,如果是这样,在实例上调用相同的方法)我试着制作一种方法。

THX

5 个答案:

答案 0 :(得分:12)

你可以这样做:

var parameters = MethodBase.GetCurrentMethod().GetParameters();
foreach (ParameterInfo parameter in parameters)
{
    //..
}

查看ParameterInfo课程。

答案 1 :(得分:1)

var params = GetParamsListOfCurrentMethod();

params是一个C#关键字,因此不能像上面那样用作变量名。

以下是有关如何使用params关键字的链接 http://msdn.microsoft.com/en-us/library/w5zay9db.aspx

从文章中提取了一些示例代码。

public static void UseParams(params int[] list)
{
    for (int i = 0; i < list.Length; i++)
    {
        Console.Write(list[i] + " ");
    }
    Console.WriteLine();
}

答案 2 :(得分:0)

您可以使用动态参数编写函数,如下所示:

    protected void Do(params object[] list)
    {
            if (list.Length < 2)
                return;

            int a_=(int)list[0];
            string b_=list[1].ToString();
    }

答案 3 :(得分:0)

答案 4 :(得分:0)

我不明白。如果你想要param值,这是你需要使用的方法,那么简单的做法

protected void Do(int a_, string b_)
{
  var paramValues = new object[]{a_, b_};
}

您想要更通用的答案吗?然后,您正在复制问题Can I get parameter names/values procedurally from the currently executing function?How to get parameter value from StackTrace 你基本上不能。