public V this[K key] { get { return(myMap[key]); } set { V oldval; bool isUpdate = myMap.TryGetValue(key, out oldval); if (isUpdate && Equals(oldval, value)) { return; } myMap[key] = value; // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression if (isUpdate) { myChange.Fire(MapEvent <K, V> .Update(key, oldval, value)); } else { myChange.Fire(MapEvent <K, V> .Add(key, value)); } } }
public bool Remove(TK key) { if (!myStorage.TryGetValue(key, out var value)) { return(false); } myStorage.Remove(key); myChange.Fire(MapEvent <TK, TV> .Remove(key, value)); return(true); }
public void Clear() { var changes = new List <MapEvent <TK, TV> >(Count); changes.AddRange(myStorage.Select(kv => MapEvent <TK, TV> .Remove(kv.Key, kv.Value))); myStorage.Clear(); foreach (var change in changes) { myChange.Fire(change); } }
public bool Remove(K key) { V value; if (!myMap.TryGetValue(key, out value)) { return(false); } myMap.Remove(key); myChange.Fire(MapEvent <K, V> .Remove(key, value)); return(true); }
public void Advise(Lifetime lifetime, Action <MapEvent <K, V> > handler) { foreach (var kv in this) { try { handler(MapEvent <K, V> .Add(kv.Key, kv.Value)); } catch (Exception e) { Log.Root.Error(e); } } myChange.Advise(lifetime, handler); }
public void Add(TK key, TV value) { myStorage.Add(key, value); myChange.Fire(MapEvent <TK, TV> .Add(key, value)); }
public void Add(K key, V value) { myMap.Add(key, value); myChange.Fire(MapEvent <K, V> .Add(key, value)); }