Code Quality Design Help

High Complexity

The following has a Cyclomatic Complexity value of 16 and a Cognitive Complexity value of 27.

/// <summary> /// Converts a page range string into an array of page numbers. Values /// are comma separated, and can be a combination of specific pages, /// and ranges. Page numbers are 1-based. /// </summary> /// <param name="pattern"> /// The page range string, similar to that on a print dialog /// </param> /// <param name="pageCount"> /// The maximum number of pages available /// </param> /// <returns> /// An array of page numbers to process /// </returns> private static IEnumerable<int> ResolvePages( string pattern, int pageCount) // mildly complex(60%) => very complex(72%) { if (string.IsNullOrWhiteSpace(pattern)) return Array.Empty<int>(); var returnValue = new List<int>(); foreach (var p in pattern.Split(',')) { var r = p.Split('-') .Select(c => c.Trim()) .ToArray(); if (r.Length == 1 && int.TryParse(r[0], out var v)) { if (v >= 1 && v <= pageCount) { returnValue.Add(v); } } else if (r.Length == 2 && string.Compare(r[0], r[1]) == 0) { if (int.TryParse(r[0], out var v2) && v2 >= 1 && v2 <= pageCount) { returnValue.Add(v2); } } else if (r.Length == 2) { if (int.TryParse(r[0], out var start) && int.TryParse(r[1], out var end)) { start = Math.Max(1, Math.Min(start, pageCount)); end = Math.Max(1, Math.Min(end, pageCount)); if (start <= end) { for (var x = start; x <= end; x++) { returnValue.Add(x); } } else { for (var x = start; x >= end; x--) { returnValue.Add(x); } } } } } return returnValue; }

See Also:

28 March 2025