public TrieNode Add(char c)
 {
     TrieNode subnode;
     if (!m_values.TryGetValue(c, out subnode))
     {
         subnode = new TrieNode();
         m_values.TryAdd(c, subnode);
     }
     return subnode;
 }
 public bool TryGetValue(char c, out TrieNode node)
 {
     return m_values.TryGetValue(c, out node);
 }