Beispiel #1
0
        /// <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
      }