/// <summary>
 /// Writes the specified property given a strongly-typed ShellProperty and a value. To allow truncation of the given value, set allowTruncatedValue
 /// to true.
 /// </summary>
 /// <typeparam name="T">The type of the property name.</typeparam>
 /// <param name="shellProperty">The property name.</param>
 /// <param name="value">The property value.</param>
 /// <param name="allowTruncatedValue">True to allow truncation (default); otherwise False.</param>
 public void WriteProperty <T>(ShellProperty <T> shellProperty, T value, bool allowTruncatedValue)
 {
     if (shellProperty == null)
     {
         throw new ArgumentNullException("shellProperty");
     }
     WriteProperty(shellProperty.PropertyKey, value, allowTruncatedValue);
 }
 /// <summary>
 /// Writes the specified property given a strongly-typed ShellProperty and a value. To allow truncation of the given value, set allowTruncatedValue
 /// to true.
 /// </summary>
 /// <typeparam name="T">The type of the property name.</typeparam>
 /// <param name="shellProperty">The property name.</param>
 /// <param name="value">The property value.</param>
 /// <param name="allowTruncatedValue">True to allow truncation (default); otherwise False.</param>
 public void WriteProperty <T>(ShellProperty <T> shellProperty, T value, bool allowTruncatedValue)
 {
     WriteProperty(shellProperty.PropertyKey, value, allowTruncatedValue);
 }
 /// <summary>
 /// Writes the specified property using a strongly-typed ShellProperty and a value.
 /// </summary>
 /// <typeparam name="T">The type of the property name.</typeparam>
 /// <param name="shellProperty">The property name.</param>
 /// <param name="value">The property value.</param>
 public void WriteProperty <T>(ShellProperty <T> shellProperty, T value)
 {
     WriteProperty <T>(shellProperty, value, true);
 }