private void SetCombineAndStore(SetOperation operation, IEnumerable <T> other)
        {
            var redisTempSet = new RedisSet <T>(database, Guid.NewGuid().ToString());

            try
            {
                redisTempSet.Add(other);
                SetCombineAndStore(operation, redisTempSet);
            }
            finally
            {
                redisTempSet.Clear();
            }
        }
        public void SymmetricExceptWith(IEnumerable <T> other)
        {
            if (other == null)
            {
                throw new ArgumentNullException("other");
            }

            var otherSet = new RedisSet <T>(database, Guid.NewGuid().ToString());

            try
            {
                otherSet.Add(other);
                SymmetricExceptWith(otherSet);
            }
            finally
            {
                otherSet.Clear();
            }
        }
        public void SymmetricExceptWith(RedisSet <T> other)
        {
            if (other == null)
            {
                throw new ArgumentNullException("other");
            }

            var intersectedSet = new RedisSet <T>(database, Guid.NewGuid().ToString());

            try
            {
                SetCombineAndStore(SetOperation.Intersect, intersectedSet, this, other);
                SetCombineAndStore(SetOperation.Union, other);
                SetCombineAndStore(SetOperation.Difference, intersectedSet);
            }
            finally
            {
                intersectedSet.Clear();
            }
        }