Пример #1
0
        /// <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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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;
                }
            }
        }