public override CompareResultBase Compare(object source, object destination, string propertyName) { var res = new KeyEnumerableResult(Type, propertyName, source, destination); if (!res.IsComparable) { return(res); } Hashtable sourceMap = ToMap((IEnumerable)source); Hashtable destionationMap = ToMap((IEnumerable)destination); var sourceIsEmpty = sourceMap.Count == 0; var destionationIsEmpty = destionationMap.Count == 0; if (sourceIsEmpty && destionationIsEmpty) { res.IsEquals = true; return(res); } if (sourceIsEmpty || destionationIsEmpty) { res.IsEquals = false; return(res); } CompareMap(sourceMap, destionationMap, res); return(res); }
private void CompareMap(Hashtable sourceMap, Hashtable destionationMap, KeyEnumerableResult res) { foreach (var key in sourceMap.Keys) { var d = destionationMap[key]; var s = sourceMap[key]; if (d == null) { if (Configuration.TrackDifference) { var objectResult = Configuration.GetComparer(_dataType).Compare(s, null, null); var dictionaryEntryResult = new DictionaryEntryResult(ResultType.New, objectResult); res.Add(key.ToString(), dictionaryEntryResult); } res.IsEquals = false; if (!Configuration.TrackDifference) { return; } } else { var objectResult = Configuration.GetComparer(_dataType).Compare(s, d); if (!objectResult.IsEquals) { res.IsEquals = false; if (!Configuration.TrackDifference) { return; } } if (Configuration.TrackDifference) { var dictionaryEntryResult = new DictionaryEntryResult(objectResult.IsEquals ? ResultType.Equal : ResultType.NotEqual, objectResult); res.Add(key.ToString(), dictionaryEntryResult); } } } // Exists Only in Destination foreach (var key in destionationMap.Keys) { if (sourceMap.ContainsKey(key)) { continue; } if (Configuration.TrackDifference) { var d = destionationMap[key]; var objectResult = Configuration.GetComparer(_dataType).Compare(null, d); var dictionaryEntryResult = new DictionaryEntryResult(ResultType.Delete, objectResult); res.Add(key.ToString(), dictionaryEntryResult); } res.IsEquals = false; if (!Configuration.TrackDifference) { return; } } }