private static void VerifyNoExplicitConflicts( Dictionary <string, object> result, CommandlineArgument[] options, ParserOptions parserOptions) { var canConflict = options .Where(o => !o.IsImplicit && o.ConflictsWithKeys.Any()) .Select(o => new { o.Key, ConflictsWith = o.ConflictsWithKeys }) .ToArray(); if (!canConflict.Any()) { return; } var errored = false; var reported = new HashSet <StringPair>(); canConflict.ForEach(o => { o.ConflictsWith.ForEach(conflict => { if (result.ContainsKey(o.Key) && result.ContainsKey(conflict)) { errored = true; var ordered = new[] { o.Key, conflict }.Select(n => options.FirstOrDefault(o => o.Key == n)) .OrderBy(o => o.LongName) .ToArray(); var left = ordered[0].LongName; var right = ordered[1].LongName; var thisConflict = new StringPair(left, right); var alreadyReported = reported.Contains(thisConflict); if (alreadyReported) { return; } reported.Add(thisConflict); parserOptions.ReportConflict($"--{left}", $"--{right}"); } }); }); if (errored) { parserOptions.ExitIfRequired(ExitCodes.ARGUMENT_ERROR); } }
protected bool Equals(StringPair other) { return(Left == other.Left && Right == other.Right); }