private static void CompareRowResultToOutput( List<List<string>> output, char selfIdentifier, char matchIdentifier, CompareRowFinalResult[] compareRowFinals, Action<List<CompareColumnResult>, List<string>> columnPrinter ) { for (int firstIndex = 0; firstIndex < compareRowFinals.Count(); firstIndex++) { var compareRowFinal = compareRowFinals[firstIndex]; // # Identifier Column var outputLine = new List<string>(); outputLine.Add(selfIdentifier + (firstIndex + 1).ToString()); // Match Column if (compareRowFinal.matchQuality == MatchQuality.PerfectMatch) { outputLine.Add(matchIdentifier + (compareRowFinal.index + 1).ToString()); } else if (compareRowFinal.matchQuality == MatchQuality.Partial) { outputLine.Add("? " + matchIdentifier + (compareRowFinal.index + 1).ToString()); } else { outputLine.Add(" "); } // Error Column if (compareRowFinal.matchQuality == MatchQuality.None) { outputLine.Add("No Match"); } else if (compareRowFinal.matchQuality == MatchQuality.PerfectMatch) { var totalErrors = compareRowFinal.compareRowResult.totalErrors; if (totalErrors != 0) { outputLine.Add(totalErrors.ToString() + " Columns"); } else { outputLine.Add("perfect"); } } else { // Partial var totalErrors = compareRowFinal.compareRowResult.totalErrors; if (totalErrors != 0) { outputLine.Add("Best " + totalErrors + " Columns"); } } columnPrinter(compareRowFinal.compareRowResult.columnResults, outputLine); output.Add(outputLine); } }