/// <summary>
        ///     Write property value.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="shellProperty"><see cref="ShellProperty{T}" />.</param>
        /// <param name="value">Property value.</param>
        /// <param name="allowTruncatedValue"></param>
        public void WriteProperty <T>(ShellProperty <T> shellProperty, T value, bool allowTruncatedValue)
        {
            Contract.Requires <ArgumentNullException>(shellProperty != null);

            WriteProperty(shellProperty.PropertyKey, value, allowTruncatedValue);
        }
        /// <summary>
        ///     Write property value.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="shellProperty"><see cref="ShellProperty{T}" />.</param>
        /// <param name="value">Property value.</param>
        public void WriteProperty <T>(ShellProperty <T> shellProperty, T value)
        {
            Contract.Requires <ArgumentNullException>(shellProperty != null);

            WriteProperty(shellProperty, value, true);
        }