/// <summary> /// Adds the specified key. /// </summary> /// <param name="key">The key.</param> /// <param name="value">The value.</param> internal void Add(string key, DictionaryEntryResult value) { if (_result == null) { _result = new SortedList <string, DictionaryEntryResult>(); } _result.Add(key, value); }
public override CompareResultBase Compare(object source, object destionation, string name) { var res = new DictionaryResult(Type, name, source, destionation); if (!res.IsComparable) { return(res); } var sourceKeys = (IEnumerable)_prKeys.GetValue(source, null); var destinationsKeys = (IEnumerable)_prKeys.GetValue(destionation, null); var param = new object[1]; CompareResultBase objectResult; foreach (var key in sourceKeys) { param[0] = key; var sourceValue = _mItemGet.Invoke(source, param); if ((bool)_mContains.Invoke(destionation, param))// Exists in Source and Destination { var destionationValue = _mItemGet.Invoke(destionation, param); objectResult = Configuration.GetComparer(destionationValue.GetType()).Compare(sourceValue, destionationValue); if (!objectResult.IsEquals) { res.IsEquals = false; if (!Configuration.TrackDifference) { return(res); } } if (Configuration.TrackDifference) { var dictionaryEntryResult = new DictionaryEntryResult(objectResult.IsEquals ? ResultType.Equal : ResultType.NotEqual, objectResult); res.Add(key.ToString(), dictionaryEntryResult); } } else// Exists Only in Source { if (Configuration.TrackDifference) { objectResult = Configuration.GetComparer(sourceValue.GetType()).Compare(sourceValue, null); var dictionaryEntryResult = new DictionaryEntryResult(ResultType.New, objectResult); res.Add(key.ToString(), dictionaryEntryResult); } res.IsEquals = false; if (!Configuration.TrackDifference) { return(res); } } } // Exists Only in Destination foreach (var key in destinationsKeys) { param[0] = key; if ((bool)_mContains.Invoke(source, param)) { continue; } if (Configuration.TrackDifference) { var destionationValue = _mItemGet.Invoke(destionation, param); objectResult = Configuration.GetComparer(destionationValue.GetType()).Compare(null, destionationValue); var dictionaryEntryResult = new DictionaryEntryResult(ResultType.Delete, objectResult); res.Add(key.ToString(), dictionaryEntryResult); } res.IsEquals = false; if (!Configuration.TrackDifference) { return(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; } } }