private string ExtractIndexerExpression(string expression, int start, out int end)
{
end = start;
int counter = 0;
for(int i = start + 1; i < expression.Length; ++i)
{
if (Array.Exists(indexExprEndChars,
delegate(char c) { return expression[i] == c; }))
{
if (counter == 0)
{
end = i;
expression = expression.Substring(start + 1, i - start - 1);
return expression;
}
else
{
--counter;
}
}
else if (Array.Exists(indexExprStartChars,
delegate(char c) { return expression[i] == c; }))
{
++counter;
}
}
throw new ArgumentException("Mismatched index expression");
}
}