public string Tag(char [] value) { // substring 1 doesn't start with '@' == tag // else substring 2 if (_count < 2 || _lens[1] < 1) { return(null); } if (value[_starts[1]] != '@') { return(_tagCache.GetFromCache(value, _starts[1], _lens[1])); } //return new string(value, _starts[1], _lens[1]); if (_count < 3) { return(null); } if (_lens[2] > 0 && value[_starts[2]] == '@') // empty tag scenario { return(_tagCache.GetFromCache(value, _starts[3], _lens[3])); } //return new string(value, _starts[3], _lens[3]); return(_tagCache.GetFromCache(value, _starts[2], _lens[2])); //return new string(value, _starts[2], _lens[2]); }