using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; namespace ScreenConnect; public abstract class KeyedCollectionEx : KeyedCollection { private IComparer itemComparer; public IComparer ItemComparer { get { if (itemComparer == null) { itemComparer = Comparer.Default; } return itemComparer; } } protected KeyedCollectionEx() { } protected KeyedCollectionEx(IEqualityComparer keyComparer) : base(keyComparer) { } protected KeyedCollectionEx(IComparer itemComparer) { this.itemComparer = itemComparer; } protected KeyedCollectionEx(IEqualityComparer keyComparer, IComparer itemComparer) : base(keyComparer) { this.itemComparer = itemComparer; } public void ReaddSorted(TItem item) { TKey keyForItem = GetKeyForItem(item); Remove(keyForItem); AddSorted(item); } public void AddSorted(TItem item) { int num = ((List)base.Items).BinarySearch(item, ItemComparer); Insert((num < 0) ? (~num) : num, item); } public void Sort() { ((List)base.Items).Sort(ItemComparer); } public TItem TryGetValue(TKey key) { if (base.Dictionary != null) { return base.Dictionary.TryGetValue(key); } return base.Items.FirstOrDefault((TItem i) => base.Comparer.Equals(GetKeyForItem(i), key)); } public new bool TryGetValue(TKey key, out TItem value) { if (base.Dictionary != null) { return base.Dictionary.TryGetValue(key, out value); } value = base.Items.Where((TItem i) => base.Comparer.Equals(GetKeyForItem(i), key)).FirstOrDefault(out var index); return index != -1; } }