public TValue this[Symbol key] { get { if (m_keys.Contains(key)) { return(m_value); } throw new KeyNotFoundException(); } set { if (value.Equals(m_value)) { m_keys.Add(key); } throw new ArgumentException(); } }