//using System.Collections.Generic;

//namespace ProtoBuf
//{
//    /// <summary>
//    /// Mutable version of the common key/value pair struct; used during serialization. This type is intended for internal use only and should not
//    /// be used by calling code; it is required to be public for implementation reasons.
//    /// </summary>
//    [ProtoContract]
//    public struct KeyValuePairSurrogate<TKey,TValue>
//    {
//        private TKey key;
//        private TValue value;
//        /// <summary>
//        /// The key of the pair.
//        /// </summary>
//        [ProtoMember(1, IsRequired = true)]
//        public TKey Key { get { return key; } set { key = value; } }
//        /// <summary>
//        /// The value of the pair.
//        /// </summary>
//        [ProtoMember(2)]
//        public TValue Value{ get { return value; } set { this.value = value; } }
//        private KeyValuePairSurrogate(TKey key, TValue value)
//        {
//            this.key = key;
//            this.value = value;
//        }
//        /// <summary>
//        /// Convert a surrogate instance to a standard pair instance.
//        /// </summary>
//        public static implicit operator KeyValuePair<TKey, TValue> (KeyValuePairSurrogate<TKey, TValue> value)
//        {
//            return new KeyValuePair<TKey,TValue>(value.key, value.value);
//        }
//        /// <summary>
//        /// Convert a standard pair instance to a surrogate instance.
//        /// </summary>
//        public static implicit operator KeyValuePairSurrogate<TKey, TValue>(KeyValuePair<TKey, TValue> value)
//        {
//            return new KeyValuePairSurrogate<TKey, TValue>(value.Key, value.Value);
//        }
//    }
//}