internal CommandParameterInfo LookupParameter(string name) { // check for complete name first if (ParameterInfoLookupTable.ContainsKey(name)) { return(ParameterInfoLookupTable[name]); } // if we didn't find it by name or alias, try to find it by prefix var candidates = (from key in ParameterInfoLookupTable.Keys where key.StartsWith(name, StringComparison.OrdinalIgnoreCase) select key).ToList(); if (candidates.Count < 1) { var msg = String.Format("No parameter was found that matches the name or alias '{0}'.", name); throw new ParameterBindingException(msg, "ParameterNotFound"); } if (candidates.Count > 1) { var msg = String.Format("Supplied parmameter '{0}' is ambiguous, possibilities are: {1}", name, String.Join(", ", candidates)); throw new ParameterBindingException(msg, "AmbiguousParameter"); } return(ParameterInfoLookupTable[candidates[0]]); }
private void RegisterParameter(CommandParameterInfo parameterInfo) { // also add it to lookuptable and check for unuque names/aliases var allNames = parameterInfo.Aliases.ToList(); allNames.Add(parameterInfo.Name); foreach (var curName in allNames) { if (ParameterInfoLookupTable.ContainsKey(curName)) { // save exception to be thrown when this object is validated, not now var msg = String.Format("The name or alias '{0}' is used multiple times.", curName); _validationException = new MetadataException(msg); continue; } ParameterInfoLookupTable[curName] = parameterInfo; } }