#nullable enable using System.Collections.Generic; using System.Collections.ObjectModel; namespace SharpGen.Platform { public sealed class ObservableSet : ObservableCollection { private readonly HashSet set; public ObservableSet(IEqualityComparer equalityComparer) => set = new HashSet(equalityComparer); public void AddRange(IEnumerable items) { foreach (var item in items) Add(item); } protected override void InsertItem(int index, T item) { if (!set.Add(item)) return; base.InsertItem(index, item); } protected override void ClearItems() { base.ClearItems(); set.Clear(); } protected override void RemoveItem(int index) { var item = this[index]; set.Remove(item); base.RemoveItem(index); } protected override void SetItem(int index, T item) { if (!set.Add(item)) return; var oldItem = this[index]; set.Remove(oldItem); base.SetItem(index, item); } } }