private bool RemoveAnonymousItem(Queue <string> nameParts, U item, bool failQuiet) { if (nameParts.Count == 0) { var removed = AnonymousItems.Remove(item); if (OnItemRemoved != null) { OnItemRemoved(null, item); } return(removed); } else { var first = nameParts.Dequeue(); if (!Subnodes.ContainsKey(first)) { if (failQuiet) { return(false); } throw new UriTreeException( String.Format( "Could not remove item '{0}' from group with full name '{1}'; " + "missing intermediate node with name '{2}'.", item, FullName, first ) ); } return(Subnodes[first].RemoveAnonymousItem(nameParts, item, failQuiet)); } }
/// <summary> /// Remove an anonymous item from this group. /// </summary> /// <param name="item"></param> public bool RemoveAnonymousItem(U item, bool searchRecursive = true) { if (!AnonymousItems.Remove(item) && searchRecursive) { if (IsLeaf) { return(false); } return(Subnodes.Any(kvp => kvp.Value.RemoveAnonymousItem(item, searchRecursive))); } if (OnItemRemoved != null) { OnItemRemoved(null, item); } return(true); }