/// <summary> /// Obtain the parameters for <paramref name="method"/> and put them in <paramref name="defaultParameterValues"/> /// </summary> /// <param name="method">The method to Obtain parameters from</param> /// <param name="defaultParameterValues">The list that will be used as the storage for the retrieved parameters, if it contains elements, those elements will be used as default value</param> /// <returns>True if successed, false otherwise</returns> public static Object[] GetParams(MethodInfo method, Object[] defaultParameterValues) { List <ParameterInfo> parameterList = new List <ParameterInfo>(); List <Object> defaultParameterValueList = new List <object>(); #region find all the generic types and options and add that to the lists. if (method.ContainsGenericParameters) { ExposableMethodAttribute att = (method.GetCustomAttributes(typeof(ExposableMethodAttribute), false)[0] as ExposableMethodAttribute); Type[] typeOptions = att.GenericParametersOptions; int[] optionSize = att.GenericParametersOptionSizes; GenericParameter[] genericOptions = new GenericParameter[optionSize.Length]; int count = 0; for (int i = 0; i < optionSize.Length; i++) { Type[] types = new Type[optionSize[i]]; for (int j = 0; j < types.Length; j++) { types[j] = typeOptions[count++]; } genericOptions[i] = new GenericParameter(types[0], types); } //Type[] instanceGenericParameters = method.ReflectedType.GetGenericArguments(); Type[] genericTypes = method.GetGenericArguments(); for (int i = 0; i < genericTypes.Length; i++) { parameterList.Add(null); defaultParameterValueList.Add( defaultParameterValues == null ? genericOptions[i]: defaultParameterValues[i]); } } #endregion parameterList.AddRange(method.GetParameters()); if (defaultParameterValues != null) { defaultParameterValueList.AddRange(defaultParameterValues); } //if the method requires no parameter, simply return an empty array if (parameterList.Count == 0) { return(new object[0]); } #region Handle the cases where at least one parameter is required as input using (ParameterInputDialog dlg = new ParameterInputDialog(parameterList.ToArray(), defaultParameterValueList.ToArray())) { dlg.ShowDialog(); return(dlg.Successed ? dlg.Parameters : null); } #endregion }
/// <summary> /// Obtain the parameters for <paramref name="method"/> and put them in <paramref name="defaultParameterValues"/> /// </summary> /// <param name="method">The method to Obtain parameters from</param> /// <param name="defaultParameterValues">The list that will be used as the storage for the retrieved parameters, if it contains elements, those elements will be used as default value</param> /// <returns>True if successed, false otherwise</returns> public static Object[] GetParams(MethodInfo method, Object[] defaultParameterValues) { List<ParameterInfo> parameterList = new List<ParameterInfo>(); List<Object> defaultParameterValueList = new List<object>(); #region find all the generic types and options and add that to the lists. if (method.ContainsGenericParameters) { ExposableMethodAttribute att = (method.GetCustomAttributes(typeof(ExposableMethodAttribute), false)[0] as ExposableMethodAttribute); Type[] typeOptions = att.GenericParametersOptions; int[] optionSize = att.GenericParametersOptionSizes; GenericParameter[] genericOptions = new GenericParameter[optionSize.Length]; int count = 0; for (int i = 0; i < optionSize.Length; i++) { Type[] types = new Type[optionSize[i]]; for (int j = 0; j < types.Length; j++) types[j] = typeOptions[count++]; genericOptions[i] = new GenericParameter(types[0], types); } //Type[] instanceGenericParameters = method.ReflectedType.GetGenericArguments(); Type[] genericTypes = method.GetGenericArguments(); for (int i = 0; i < genericTypes.Length; i++) { parameterList.Add(null); defaultParameterValueList.Add( defaultParameterValues == null ? genericOptions[i]: defaultParameterValues[i]); } } #endregion parameterList.AddRange(method.GetParameters()); if (defaultParameterValues != null) defaultParameterValueList.AddRange(defaultParameterValues); //if the method requires no parameter, simply return an empty array if (parameterList.Count == 0) return new object[0]; #region Handle the cases where at least one parameter is required as input ParameterInputDialog dlg = new ParameterInputDialog(parameterList.ToArray(), defaultParameterValueList.ToArray()); dlg.ShowDialog(); return dlg.Successed ? dlg.Parameters : null; #endregion }
/// <summary> /// Obtain the parameters for <paramref name="method"/> and put them in <paramref name="paramList"/> /// </summary> /// <param name="method">The method to Obtain parameters from</param> /// <param name="defaultParameterValues">The list that will be used as the storage for the retrieved parameters, if it contains elements, those elements will be used as default value</param> /// <returns>True if successed, false otherwise</returns> public static Object[] GetParams(MethodInfo method, Object[] defaultParameterValues) { List<ParameterInfo> parameterList = new List<ParameterInfo>(); List<Object> defaultParameterValueList = new List<object>(); #region find all the generic types and options and add that to the lists. if (method.ContainsGenericParameters) { String[] genericOptions = (method.GetCustomAttributes(typeof(ExposableMethodAttribute), false)[0] as ExposableMethodAttribute) .GenericParametersOptions.Split(';'); Type[] instanceGenericParameters = method.ReflectedType.GetGenericArguments(); Type[] genericTypes = method.GetGenericArguments(); for (int i = 0; i < genericTypes.Length; i++) { parameterList.Add(null); defaultParameterValueList.Add( defaultParameterValues == null ? String.Format( "{0}|{1}", genericTypes[i].Name, genericOptions[i].Substring(0, 1).Equals(":") ? instanceGenericParameters[i].FullName + genericOptions[i] : genericOptions[i]) : defaultParameterValues[i]); } } #endregion parameterList.AddRange(method.GetParameters()); if (defaultParameterValues != null) { defaultParameterValueList.AddRange(defaultParameterValues); } //if the method requires no parameter, simply return an empty array if (parameterList.Count == 0) { return new object[0]; } #region Handle the cases where at least one parameter is required as input ParameterInputDialog dlg = new ParameterInputDialog(parameterList.ToArray(), defaultParameterValueList.ToArray()); dlg.ShowDialog(); return dlg.Successed ? dlg.Parameters : null; #endregion }