private static string callLRRuntime(RunTime runtime, LRFunction lrf) { string methodName = lrf.name; List <string> args = lrf.args; var parameters = new object[args.Count]; for (int i = 0; i < parameters.Length; i++) { switch (args[i]) { case "@EXTRARES": parameters[i] = Keyword.EXTRARES; break; case "@LAST": parameters[i] = Keyword.LAST; break; case "@ENDITEM": parameters[i] = Keyword.ENDITEM; break; case "@ITEMDATA": parameters[i] = Keyword.ITEMDATA; break; default: parameters[i] = args[i]; break; } } Type t = typeof(APITest.LR.Interface.iLRFunctions); var method = t.GetMethod(methodName); if (method != null) { Type oType = runtime.GetType(); var oMethod = oType.GetMethod(method.Name); var methodParamters = oMethod.GetParameters(); var useParamters = new object[methodParamters.Length]; //组装参数 for (int i = 0; i < useParamters.Length; i++) { //传入参数 < 需要的参数 使用默认值 if (parameters.Length <= i) { if (methodParamters[i].ParameterType == typeof(string)) { if (methodParamters[i].HasDefaultValue) { useParamters[i] = methodParamters[i].DefaultValue; continue; } else { throw new Exception($"{methodName} 缺少必要参数"); } } else { useParamters[i] = new object[0]; } } if (methodParamters[i].ParameterType == typeof(string)) { useParamters[i] = parameters[i]; } else { //如果参数不是 string 类型 那么肯定是 object[] 可选参数,讲剩下的参数组装成object[] 参数 var objs = new Object[parameters.Length - i]; for (int y = 0; y < objs.Length; y++) { objs[y] = parameters[y + i]; } useParamters[i] = objs; break; } } var rtn = oMethod.Invoke(runtime, useParamters); if (rtn == null) { return("True"); } return(rtn.ToString()); } else { throw new Exception($"找不到方法 {methodName}"); } }