Facendo seguito ai miei post precedenti, il metodo QueryExpression::Parse effettua chiaramente un controllo sui tipi coinvolti nell'espressione; ad es. Parse solleverebbe un'eccezione per un'espressione del tipo
x * 2
se x è un parametro dichiarato come stringa.
Un'altra interessante caratteristica del metodo Parse è che questo è in grado di inferire il tipo del risultato dell'espressione. Es:
string expr = "x + 2";
Dictionary<string, Expression> scope = new Dictionary<string, Expression>();
scope.Add("x", Expression.Parameter(typeof(int), "x"));
Expression expression = QueryExpression.Parse(expr, scope);
// Expression::Type è il tipo del valore calcolato dall'espressione.
Console.WriteLine(expression.Type); // System.Int32
Se expr fosse invece
string expr = "x + 2.0";
// ...
Console.WriteLine(expression.Type); // System.Double
Infine, se expr fosse ad es.
string expr = "x + \"Hello\"";
// ...
Console.WriteLine(expression.Type); // System.String