我需要通过默认值参数调用方法.它有一条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)
{
}
Run Code Online (Sandbox Code Playgroud)
为什么?如何通过反射参数的默认值来调用此方法?
您可以使用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);
Run Code Online (Sandbox Code Playgroud)