/// <summary> /// Adds new folder or overwrites existing one. /// </summary> public void Add(NamedItemTreeCollection <T> folder) { if (folder == null) { throw new ArgumentNullException("folder"); } NamedItemTreeCollection <T> f; if (folders.TryGetValue(folder.name, out f)) { folders[folder.name] = folder; } else { folders.Add(folder.Name, folder); } }
/// <summary> /// Adds new item to internal collection using name splitting. /// </summary> public void Add(string itemName, T item) { if (itemName == null) { throw new ArgumentNullException("itemName"); } string[] names = itemName.Split(splitChars); string shortName = names[0]; NamedItemTreeCollection <T> destination = this; NamedItemTreeCollection <T> subFolder; // find proper collection: if (names.Length > 1) { // find proper parent item or create such one: for (int i = 0; i < names.Length - 1; i++) { if (destination.Folders.TryGetValue(names[i], out subFolder)) { destination = subFolder; } else { // create all required subfolders: for (int j = i; j < names.Length - 1; j++) { subFolder = new NamedItemTreeCollection <T>(names[j], splitChars); destination.Add(subFolder); destination = subFolder; } break; } } shortName = names[names.Length - 1]; } // add or overwrite item: destination.AddOrOverwrite(shortName, item); }