/// <exception cref="System.IO.IOException"></exception>
        public override bool IsNameConflicting(string name)
        {
            RefList <Ref> packed = GetPackedRefs();
            RefList <RefDirectory.LooseRef> loose = GetLooseRefs();
            // Cannot be nested within an existing reference.
            int lastSlash = name.LastIndexOf('/');

            while (0 < lastSlash)
            {
                string needle = Sharpen.Runtime.Substring(name, 0, lastSlash);
                if (loose.Contains(needle) || packed.Contains(needle))
                {
                    return(true);
                }
                lastSlash = name.LastIndexOf('/', lastSlash - 1);
            }
            // Cannot be the container of an existing reference.
            string prefix = name + '/';
            int    idx;

            idx = -(packed.Find(prefix) + 1);
            if (idx < packed.Size() && packed.Get(idx).GetName().StartsWith(prefix))
            {
                return(true);
            }
            idx = -(loose.Find(prefix) + 1);
            if (idx < loose.Size() && loose.Get(idx).GetName().StartsWith(prefix))
            {
                return(true);
            }
            return(false);
        }
 /// <summary>
 /// Привязан ли элемент к коллекции
 /// </summary>
 /// <param name="links">Коллекция привязок</param>
 /// <param name="chekedElementID">ИД элемента, который проверяется на привязку</param>
 /// <param name="includeNotLinked">Считать, что элемент привязан, если коллекция с привязками null или пуста</param>
 /// <returns></returns>
 private bool IsLinked(RefList <int> links, int chekedElementID, bool includeNotLinked)
 {
     if (links == null || links.Count == 0)
     {
         return(includeNotLinked);
     }
     else
     {
         return(links.Contains(chekedElementID));
     }
 }