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); }