我想获取任何方法的参数值,即使它们使用C#有不同数量的参数 例如,如果您有以下3种方法:
public void method1 (string param1)
{
List<string> parametervalues = getParameters(this.Method);
}
public void method2 (int param1, string param2)
{
List<string> parametervalues = getParameters(this.Method);
}
public void method3 (string param1, int param2, bool param3)
{
List<string> parametervalues = getParameters(this.Method);
}
所以在getParameters方法中,它将采用methodname并返回作为字符串列表的参数值,无论参数的数量是多少。
我达到了一个点,我可以得到参数的数量,但没有值如下
var method = MethodInfo.GetCurrentMethod();
var parameters = method.GetParameters();
List<string> parameterList = new List<string>();
if (parameters.Length > 0)
{
foreach (var p in parameters)
{
parameterList.Add(p.Name);
}
}
更新:
我通过使用(params object [] values)作为方法参数找到了另一种方法,如下所示
method1(string a, string b, string c)
{
list<string> = getParameterasList(a,b,c);
}
getParameterasList(params object[] values)
{
List<string> parameterList = new List<string>();
if (values.Length > 0)
{
foreach (var v in values)
{
parameterList.Add(v.ToString());
}
}
return parameterList;
}
答案 0 :(得分:0)
您可以使用interception完成此操作。警告:需要一段时间才能完成,理解并正确实施。一旦你看到拦截调用的基础知识并且可以实现它,你就能获得方法参数的值。
简而言之,拦截是拦截方法调用,在调用之前执行您想要发生的事情,然后让调用实际发生的过程,然后您有机会在回来的路上对调用执行某些操作打给来电者。
这里很难向您展示一个完整的示例,但请按照该链接进行操作,您会没事的。在拦截期间,这是我们从方法返回异常时获取方法参数值的方式。 (您可以访问IMethodCallMessage
,其中包含您需要的信息。)我们这样做,以便记录方法参数:
private static List<ParameterInformation> GetParameterInfoList(IMethodCallMessage methodCallMessage)
{
var = new List<ParameterInformation>();
// Note: This works even if a parameter's value is null.
for(int i = 0 ; i < methodCallMessage.ArgCount ; i++)
{
parameterInformationList.Add(new ParameterInformation(methodCallMessage.GetArgName(i), methodCallMessage.Args[i]));
}
return parameterInformationList;
}