/// <summary> /// Converts arguments from one type to another type that is required by the method call. /// </summary> /// <param name="args"></param> /// <param name="method">The method for which the parameters need to be converted</param> public static object[] ConvertArgs(List <object> args, MethodInfo method) { var hostLangArgs = new List <object>(); var parameters = method.GetParameters(); if (parameters.Length == 0) { return(hostLangArgs.ToArray()); } // REQUIREMENT: Number of values must match # of parameters in method. for (int ndx = 0; ndx < parameters.Length; ndx++) { var param = parameters[ndx]; var sourceArg = args[ndx] as LObject; // CASE 1: Null if (sourceArg == LObjects.Null) { var defaultVal = LangTypeHelper.GetDefaultValue(param.ParameterType); hostLangArgs.Add(defaultVal); } // CASE 2: int, bool, date, time else if (sourceArg.Type.IsBuiltInType()) { var convertedVal = sourceArg.GetValue(); convertedVal = ConvertToCorrectHostLangValue(param.ParameterType, convertedVal); hostLangArgs.Add(convertedVal); } // CASE 3: LArrayType else if (sourceArg.Type == LTypes.Array && param.ParameterType.IsGenericType) { var gentype = param.ParameterType.GetGenericTypeDefinition(); if (gentype == typeof(List <>) || gentype == typeof(IList <>)) { args[ndx] = ConvertToTypedList((List <object>)sourceArg.GetValue(), param.ParameterType); } } } return(hostLangArgs.ToArray()); }
/// <summary> /// Converts arguments from one type to another type that is required by the method call. /// </summary> /// <param name="args"></param> /// <param name="method">The method for which the parameters need to be converted</param> public static object[] ConvertArgs(List <object> args, MethodInfo method) { var hostLangArgs = new List <object>(); var parameters = method.GetParameters(); if (parameters.Length == 0) { return(hostLangArgs.ToArray()); } // REQUIREMENT: Number of values must match # of parameters in method. for (var ndx = 0; ndx < parameters.Length; ndx++) { var param = parameters[ndx]; var sourceArg = args[ndx] as LObject; // CASE 1: Null if (sourceArg == LObjects.Null) { var defaultVal = LangTypeHelper.GetDefaultValue(param.ParameterType); hostLangArgs.Add(defaultVal); } // CASE 2: int, bool, date, time else if (sourceArg.Type.IsPrimitiveType()) { var convertedVal = sourceArg.GetValue(); convertedVal = ConvertToCorrectHostLangValue(param.ParameterType, convertedVal); hostLangArgs.Add(convertedVal); } // CASE 3: LArrayType and generic types. else if (sourceArg.Type == LTypes.Array) { // Case 1: Array if (param.ParameterType.IsArray) { if (param.ParameterType == typeof(string[])) { var convertedVal = ConvertToHostLangArray(param.ParameterType, (LArray)sourceArg); hostLangArgs.Add(convertedVal); } } else if (param.ParameterType.IsGenericType) { var gentype = param.ParameterType.GetGenericTypeDefinition(); // Case 2: Matching types IList<object> if (gentype == typeof(IList <object>)) { var convertedVal = sourceArg.GetValue(); hostLangArgs.Add(convertedVal); } // Case 3: Non-matching types List<object> to IList<Person> else if (gentype == typeof(List <>) || gentype == typeof(IList <>)) { //args[ndx] = ConvertToTypedList((List<object>) sourceArg.GetValue(), param.ParameterType); var convertedArr = ConvertToTypedList((List <object>)sourceArg.GetValue(), param.ParameterType); hostLangArgs.Add(convertedArr); } } } } return(hostLangArgs.ToArray()); }