簡體   English   中英

如何通過反射按參數的默認值調用方法

[英]How invoke method for a method by default value for parameters by reflection

我需要通過默認值參數調用方法。 它通過此消息具有TargetParameterCountExceptionParameter count mismatch

var methodName = "MyMethod";
var params = new[] { "Param 1"};

var method = typeof(MyService).GetMethod(methodName, BindingFlags.Instance | BindingFlags.NonPublic);
method.Invoke(method.IsStatic ? null : this, params);

private void MyMethod(string param1, string param2 = null)
{
}

為什么? 如何通過反射參數的默認值來調用此方法?

您可以使用ParameterInfo.HasDefaultValueParameterInfo.DefaultValue來檢測此情況。 您需要檢查您已經給出的參數數量是否等於方法中的參數數量,然后找到具有默認值的參數並提取這些默認值。

例如:

var parameters = method.GetParameters();
object[] args = new object[parameters.Length];
for (int i = 0; i < args.Length; i++)
{
    if (i < providedArgs.Length)
    {
        args[i] = providedArgs[i];
    }
    else if (parameters[i].HasDefaultValue)
    {
        args[i] = parameters[i].DefaultValue;
    }
    else
    {
        throw new ArgumentException("Not enough arguments provided");
    }
}
method.Invoke(method.IsStatic ? null : this, args);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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