예제 #1
0
 public bool Contains(CollectionItem <T> item)
 {
     if (InnerDict.TryGetValue(item.Item, out List <int> indexes))
     {
         foreach (int index in indexes)
         {
             CollectionItem <T>?value = InnerList[index];
             if (value is not null && value.Equals(item))
             {
                 return(true);
             }
         }
     }
     return(false);
 }
예제 #2
0
        public CollectionItem <T>?this[int index]
        {
            get
            {
                return(InnerList[index]);
            }
            set
            {
                CollectionItem <T>?oldValue = InnerList[index];
                CollectionItem <T>?newValue = value;

                if (oldValue is null && newValue is null)
                {
                    return;
                }

                if (oldValue is null || newValue is null || !oldValue.Equals(newValue))
                {
                    if (!Contains(newValue !))
                    {
                        NotifyChangedEventArgs <CollectionItem <T>?> eventArgs = new NotifyChangedEventArgs <CollectionItem <T>?>(NotifyCollectionChangedAction.Replace, newValue, oldValue, index);
                        BeforeCollectionChanged?.Invoke(this, eventArgs);

                        if (oldValue is not null)
                        {
                            RemoveAt(oldValue, index);
                        }

                        InnerList[index] = newValue;
                        if (newValue is not null)
                        {
                            AddIndex(newValue.Item, index);
                        }

                        CollectionChanged?.Invoke(this, eventArgs);
                    }
                }
            }
        }