[英]How invoke method for a method by default value for parameters by reflection
我需要通過默認值參數調用方法。 它通過此消息具有TargetParameterCountException
: Parameter 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.HasDefaultValue
和ParameterInfo.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.