[英]Get Values of Parameters of a Method Regardless their number or type C#
我想獲取任何方法的參數值,即使它們使用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方法中,它將使用方法名稱並以字符串列表形式返回參數的值,而不管參數的數量在哪里。
我達到了可以獲取參數數量但沒有值的程度,如下所示
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;
}
您可以使用攔截來完成此操作。 警告:需要花費一些時間來理解,理解和正確實施它。 一旦您了解了攔截調用的基礎知識並可以實現它,就可以獲取方法參數的值。
簡而言之,攔截是攔截對方法的調用的過程,它是在調用之前執行您想發生的事情,然后讓調用實際發生,然后您有機會在返回到目標的途中對該調用做一些事情。呼叫者。
在這里很難為您展示一個完整的示例,但是請單擊該鏈接,您會很好的。 在攔截過程中,這是從方法返回異常時如何獲取方法參數的值。 (您將有權訪問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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.