예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        /// <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);
        }