using System; using System.Collections.Generic; using System.Text; namespace sharpcomparer { public class ProcedureParameterComparison : Comparison { public ProcedureParameterComparison(ProcedureParameter leftItem, ProcedureParameter rightItem, Comparison.ComparisonDifference difference) : base(leftItem, rightItem, difference) { } public static List Compare(List left, List right) { left.Sort(delegate(ProcedureParameter p1, ProcedureParameter p2) { return p1.OrdinalPosition.CompareTo(p2.OrdinalPosition); }); right.Sort(delegate(ProcedureParameter p1, ProcedureParameter p2) { return p1.OrdinalPosition.CompareTo(p2.OrdinalPosition); }); List comparison = new List(); foreach (ProcedureParameter item in left) { ProcedureParameter result = right.Find( delegate(ProcedureParameter find) { return find.ParameterName == item.ParameterName; } ); if (result != null) { if (item != result) { comparison.Add(new ProcedureParameterComparison(item, result, ComparisonDifference.Different)); } else { comparison.Add(new ProcedureParameterComparison(item, result, ComparisonDifference.None)); } } else { comparison.Add(new ProcedureParameterComparison(item, null, ComparisonDifference.LeftOnly)); } } foreach (ProcedureParameter item in right) { ProcedureParameter result = left.Find( delegate(ProcedureParameter find) { return find.ParameterName == item.ParameterName; } ); if (result == null) { comparison.Add(new ProcedureParameterComparison(null, item, ComparisonDifference.RightOnly)); } } return comparison; } } }