public IPathNode FindNode(string path) { path += '.'; string name = string.Empty; IPathNode last = mRoot; for (int i = 0; i < path.Length && last != null; ++i) { char c = path[i]; if (c == '.') { if (!string.IsNullOrEmpty(name)) { last = last.Find(name); name = string.Empty; } } else if (c == '[') { if (!string.IsNullOrEmpty(name) || last is ArrayNode == false) { last = last.Find(name); name = string.Empty; } } else if (c == ']') { last = last.Find(name); name = string.Empty; } else { name += c; } } return(last); }