public static TrackableSetTracker <T> Convert(TrackableSetTrackerSurrogate <T> surrogate)
        {
            if (surrogate == null)
            {
                return(null);
            }

            var tracker = new TrackableSetTracker <T>();

            foreach (var value in surrogate.AddValues)
            {
                tracker.TrackAdd(value);
            }
            foreach (var value in surrogate.RemoveValues)
            {
                tracker.TrackRemove(value);
            }
            return(tracker);
        }
        public static TrackableSetTrackerSurrogate <T> Convert(TrackableSetTracker <T> tracker)
        {
            if (tracker == null)
            {
                return(null);
            }

            var surrogate = new TrackableSetTrackerSurrogate <T>();

            foreach (var change in tracker.ChangeMap)
            {
                if (change.Value == TrackableSetOperation.Add)
                {
                    surrogate.AddValues.Add(change.Key);
                }
                else
                {
                    surrogate.RemoveValues.Add(change.Key);
                }
            }
            return(surrogate);
        }