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); }
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); } } } }