public StoreValue(StoreValue <TKey, TStatus, TValue> storeValue)
        {
            Contract.Requires(storeValue != null);

            this.Key    = storeValue.Key;
            this.Status = new StoreStatus <TStatus>(storeValue.Status);
            this.Value  = storeValue.Value;
        }
        /// <summary>
        /// Indicates whether the current object is equal to another object of the same type.
        /// </summary>
        /// <param name="other">An object to compare with this object.</param>
        /// <returns><c>True</c> if the current object is equal to the <paramref name="other"/> parameter; otherwise, <c>false</c>.</returns>
        public bool Equals(StoreValue <TKey, TStatus, TValue> other)
        {
            if (ReferenceEquals(null, other))
            {
                return(false);
            }

            if (ReferenceEquals(this, other))
            {
                return(true);
            }

            return(object.Equals(other.Key, this.Key) && object.Equals(other.Status, this.Status) && object.Equals(other.Value, this.Value));
        }
 protected override void WriteToStorageInternal(StoreValue <TKey, TStatus, TValue> value)
 {
     Contract.Requires(value != null);
     Contract.Requires(!Equals(value.Key, null));
 }
 /// <summary>
 /// Writes the specified value to storage.
 /// </summary>
 /// <param name="value">The value.</param>
 protected abstract void WriteToStorageInternal(StoreValue <TKey, TStatus, TValue> value);
 protected override void WriteToStorageInternal(StoreValue <TKey, TStatus, TValue> value)
 {
     var fileName = this.GetFileName(value.Key);
 }