/// <summary>
 /// Sets a value in the state.
 /// </summary>
 /// <param name="item">The item.</param>
 /// <param name="name">The name.</param>
 /// <param name="value">The value.</param>
 public void SetValue(ProjectItem item, string name, string value)
 {
     var localValue = this.FindValue(item, name);
     if (localValue == null)
     {
         if (value != null)
         {
             this.Values.Add(new ProjectValue(item.UniversalName, name, value));
         }
     }
     else
     {
         if (value == null)
         {
             this.Values.Remove(localValue);
         }
         else
         {
             localValue.Value = value;
         }
     }
 }
 /// <summary>
 /// Gets a value from the state.
 /// </summary>
 /// <param name="item">The item.</param>
 /// <param name="name">The name.</param>
 /// <returns>
 /// The value if it exists; <c>null</c> otherwise.
 /// </returns>
 public string GetValue(ProjectItem item, string name)
 {
     var value = this.FindValue(item, name);
     return value == null ? null : value.Value;
 }
 /// <summary>
 /// Attempts to find a value.
 /// </summary>
 /// <param name="item">The item.</param>
 /// <param name="name">The name.</param>
 /// <returns>
 /// The <see cref="ProjectValue"/> if found; <c>null</c> otherwise.
 /// </returns>
 private ProjectValue FindValue(ProjectItem item, string name)
 {
     var value = this.Values
         .SingleOrDefault(v => v.Owner == item.UniversalName && v.Name == name);
     return value;
 }