/// <summary> /// Actually registers a new parameter handler. /// </summary> /// <param name="parameterName">The name of the parameter.</param> /// <param name="valueDescriptionString">The description string for the parameter value.</param> /// <param name="descriptionString">The description string for the parameter.</param> /// <param name="isFlag">The value indicating whether the parameter represents a flag and, thus, doesn't need a value.</param> /// <param name="handler">The delegate to handle the parameter.</param> /// <param name="parameterType">Whether the parameter is required or optional.</param> private void RegisterParameterHandlerImpl( string parameterName, string valueDescriptionString, string descriptionString, bool isFlag, Func <string, bool> handler, CommandLineParameterType parameterType) { Debug.Assert(handler != null, "A valid handler should be specified."); if (string.IsNullOrEmpty(parameterName)) { throw new ArgumentException("A parameter name should be a valid non-empty string.", "parameterName"); } if (this.parameterDescriptions.ContainsKey(parameterName)) { throw new ArgumentException("Given parameter was already registered.", "parameterName"); } if (!isFlag && string.IsNullOrEmpty(valueDescriptionString)) { throw new ArgumentException("A parameter value description should be a valid non-empty string.", "valueDescriptionString"); } if (string.IsNullOrEmpty(descriptionString)) { throw new ArgumentException("A parameter description should be a valid non-empty string.", "descriptionString"); } if (handler == null) { throw new ArgumentNullException("handler"); } this.parameterDescriptions.Add( parameterName, new ParameterDescription(valueDescriptionString, descriptionString, isFlag, handler, parameterType)); }
/// <summary> /// Initializes a new instance of the <see cref="ParameterDescription"/> class. /// </summary> /// <param name="valueDescriptionString">The value description string for the parameter.</param> /// <param name="descriptionString">The description string for the parameter.</param> /// <param name="isFlag">The value indicating whether the parameter represents a flag and, thus, doesn't need a value.</param> /// <param name="handler">The handler for the parameter value.</param> /// <param name="type">The type.</param> public ParameterDescription( string valueDescriptionString, string descriptionString, bool isFlag, Func <string, bool> handler, CommandLineParameterType type) { Debug.Assert(!(!isFlag && string.IsNullOrEmpty(valueDescriptionString)), "A valid value description string should be specified for non-flag parameters."); Debug.Assert(!string.IsNullOrEmpty(descriptionString), "A valid description string should be specified."); Debug.Assert(!(isFlag && type == CommandLineParameterType.Required), "A flag can not be required."); Debug.Assert(handler != null, "A valid handler should be specified."); this.ValueDescriptionString = valueDescriptionString; this.DescriptionString = descriptionString; this.IsFlag = isFlag; this.Handler = handler; this.Type = type; }
/// <summary> /// Registers a new handler for the parameter of floating-point type. /// </summary> /// <param name="parameterName">The name of the parameter.</param> /// <param name="valueDescriptionString">The description string for the parameter value.</param> /// <param name="descriptionString">The description string for the parameter.</param> /// <param name="handler">The handler.</param> /// <param name="parameterType">Whether the parameter is required or optional.</param> public void RegisterParameterHandler( string parameterName, string valueDescriptionString, string descriptionString, Action <double> handler, CommandLineParameterType parameterType) { if (handler == null) { throw new ArgumentNullException("handler"); } Func <string, bool> handlerWrapper = parameterValueString => { double parameterValue; if (!double.TryParse(parameterValueString, out parameterValue)) { return(false); } handler(parameterValue); return(true); }; // Other parameters are checked inside the RegisterParameterHandlerImpl this.RegisterParameterHandlerImpl(parameterName, valueDescriptionString, descriptionString, false, handlerWrapper, parameterType); }
/// <summary> /// Registers a new handler for the command-line parameter of string type. /// </summary> /// <param name="parameterName">The name of the parameter.</param> /// <param name="valueDescriptionString">The description string for the parameter value.</param> /// <param name="descriptionString">The description string for the parameter.</param> /// <param name="handler">The handler.</param> /// <param name="parameterType">Whether the parameter is required or optional.</param> public void RegisterParameterHandler( string parameterName, string valueDescriptionString, string descriptionString, Action <string> handler, CommandLineParameterType parameterType) { if (handler == null) { throw new ArgumentNullException(nameof(handler)); } Func <string, bool> handlerWrapper = parameterValueString => { handler(parameterValueString); return(true); }; // Other parameters are checked inside the RegisterParameterHandlerImpl this.RegisterParameterHandlerImpl(parameterName, valueDescriptionString, descriptionString, false, handlerWrapper, parameterType); }