public string this[string name]
        {
            get
            {
                string result;
                if (m_Data.TryGetValue(name, out result))
                {
                    return(result);
                }
                return(null);
            }
            set
            {
                lock (m_Sync)
                {
                    var data = new VarsDictionary(m_Data);

                    string existing;
                    if (data.TryGetValue(name, out existing))
                    {
                        data[name] = value;
                    }
                    else
                    {
                        data.Add(name, value);
                    }

                    m_Data = data;
                }
            }
        }
 public bool Remove(string key)
 {
     lock (m_Sync)
     {
         var data   = new VarsDictionary(m_Data);
         var result = data.Remove(key);
         m_Data = data;
         return(result);
     }
 }
 public void Clear()
 {
     m_Data = new VarsDictionary();
 }