//------------------------------------------------------------------------------------------------------------------------ bool _recRemove(string[] elements, TKey key, int index) { //check if (elements == null || elements.Length == 0) { return(false); } //check if index is last element bool removed = false; if (index >= elements.Length) { //add to keys Keys.Remove(key); //remove me from parent if (Keys.Count == 0) { lock (Children) { var me = ParentNode.Children.TryGetOrDefault(TopicNodeId); if (this == me) { ParentNode.Children.Remove(TopicNodeId); } } } } else if (index == elements.Length - 1 && (elements[index] == "#" || elements[index] == "+")) { //add to promiscious keys PromiscuousKeys.Remove(key); } else { //add on proper list MqttTopicNode <TKey> node; lock (Children) { node = Children.TryGetOrDefault(elements[index]); if (node == null) { return(false); } } //continue recursion removed = node._recRemove(elements, key, index + 1); } //cleanup? return(removed | cleanUp()); }