public override void ConvertToSurrogate(ImmutableSortedDictionary <TKey, TValue> value, ref ImmutableSortedDictionarySurrogate <TKey, TValue> surrogate)
        {
            if (value is null)
            {
                surrogate = default;
                return;
            }
            else
            {
                surrogate = new ImmutableSortedDictionarySurrogate <TKey, TValue>
                {
                    Values = new List <KeyValuePair <TKey, TValue> >(value)
                };

                if (!ReferenceEquals(value.KeyComparer, Comparer <TKey> .Default))
                {
                    surrogate.KeyComparer = value.KeyComparer;
                }

                if (!ReferenceEquals(value.ValueComparer, EqualityComparer <TKey> .Default))
                {
                    surrogate.ValueComparer = value.ValueComparer;
                }
            }
        }
        public override ImmutableSortedDictionary <TKey, TValue> ConvertFromSurrogate(ref ImmutableSortedDictionarySurrogate <TKey, TValue> surrogate)
        {
            if (surrogate.Values is null)
            {
                return(null);
            }
            else
            {
                var result = ImmutableSortedDictionary.CreateRange(surrogate.Values);

                if (surrogate.KeyComparer is object && surrogate.ValueComparer is object)
                {
                    result = result.WithComparers(surrogate.KeyComparer, surrogate.ValueComparer);
                }
                else if (surrogate.KeyComparer is object)
                {
                    result = result.WithComparers(surrogate.KeyComparer);
                }

                return(result);
            }
        }