如何获取数组中的方法参数

本文关键字:方法 参数 数组 何获取 获取 | 更新日期: 2023-09-27 18:19:27

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

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

如何获取数组中的方法参数

您可以这样做:

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

请查看ParameterInfo类。

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

使用Reflection.NET获取方法的参数名称。

使用反射获取方法名称和参数

http://msdn.microsoft.com/en-us/library/system.reflection.parameterinfo.aspx

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

    protected void Do(params object[] list)
    {
            if (list.Length < 2)
                return;
            int a_=(int)list[0];
            string b_=list[1].ToString();
    }

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

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

你想要一个更通用的答案吗?那么你在重复问题。我可以从当前执行的函数中按程序获取参数名称/值吗?以及如何从StackTrace中获取参数值
基本上你不能。