protected bool CheckParamsCompatibility(ParameterInfo[] paramsInfo, Type[] types, object[] values) { for (int i = 0; i < paramsInfo.Length; i++) { Type paramType = paramsInfo[i].ParameterType; if (paramType.IsInstanceOfType(values[i])) { continue; } // null and reference types if (values[i] == null && !paramType.IsValueType) { continue; } // possible autocast between generic/non-generic common types if (ConvertManager.CanChangeType(types[i], paramType)) { continue; } // incompatible parameter return(false); } return(true); }