using System; using System.Collections.Generic; namespace Obfuz.Utils { public class CachedDictionary { private readonly Func _valueFactory; private readonly Dictionary _cache; public CachedDictionary(Func valueFactory) { _cache = new Dictionary(); _valueFactory = valueFactory; } public CachedDictionary(IEqualityComparer equalityComparer, Func valueFactory) { _cache = new Dictionary(equalityComparer); _valueFactory = valueFactory; } public V GetValue(K key) { if (!_cache.TryGetValue(key, out var value)) { value = _valueFactory(key); _cache[key] = value; } return value; } } }