簡體   English   中英

獲取方法的參數值,無論其數量或類型為C#

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM