Beispiel #1
0
        private object[] MapParameterValues(MethodInfo method, ParameterValueToken[] valueTokens) {
            ParameterInfo[] methodParameters = method.GetParameters();
            object[] paramValues = new object[methodParameters.Length];
            for (int paramIndex = 0; paramIndex < methodParameters.Length; paramIndex++) {
                ParameterInfo currentParameter = methodParameters[paramIndex];
                ParameterValueToken valueToken = valueTokens.SingleOrDefault(pvt => pvt.Parameter == currentParameter);
                if (valueToken != null) {
                    paramValues[paramIndex] = valueToken.Value;
                } else {
                    ParamAttribute attribute = ArgParser.GetAttribute<ParamAttribute>(currentParameter);
                    if (attribute.Optional == false) {
                        throw new ArgumentException("Parameter '" + (attribute.Shortcut ?? currentParameter.Name) + "' is required.");
                    }

                    if (attribute.DefaultValue != null) {
                        paramValues[paramIndex] = attribute.DefaultValue;
                    } else {
                        paramValues[paramIndex] = Activator.CreateInstance(currentParameter.ParameterType);
                    }
                }
            }

            return paramValues;
        }
 public bool Equals(ParameterValueToken other) {
     if (ReferenceEquals(null, other)) return false;
     if (ReferenceEquals(this, other)) return true;
     return Equals(other.Parameter, Parameter) && Equals(other.Value, Value);
 }