using System.Collections; using System.Diagnostics.CodeAnalysis; namespace Toolkit.Foundation; public class ReadOnlyIndexDictionary : IReadOnlyDictionary, IReadOnlyIndexDictionary where TKey : notnull { private readonly Dictionary dictionary; private readonly List> indexedItems; public ReadOnlyIndexDictionary(IDictionary items) { dictionary = new Dictionary(items); indexedItems = [.. dictionary]; } public TValue this[TKey key] => dictionary[key]; public KeyValuePair this[int index] => indexedItems[index]; public IEnumerable Keys => dictionary.Keys; public IEnumerable Values => dictionary.Values; public int Count => dictionary.Count; public bool ContainsKey(TKey key) => dictionary.ContainsKey(key); public IEnumerator> GetEnumerator() => dictionary.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => dictionary.GetEnumerator(); public bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value) { if (dictionary.TryGetValue(key, out TValue? localValue)) { if (localValue is not null) { value = localValue; return true; } } value = default; return false; } }