Al intentar ejecutar el siguiente código:"El operador binario Add no está definido para los tipos 'System.String' y 'System.String'." -- ¿De Verdad?
Expression<Func<string, string>> stringExpression = Expression.Lambda<Func<string, string>>(
Expression.Add(
stringParam,
Expression.Constant("A")
),
new List<ParameterExpression>() { stringParam }
);
string AB = stringExpression.Compile()("B");
consigo el error que se hace referencia en el título: "El operador Agregar binaria no está definida para 'System.String' los tipos y 'System.String'." ¿Es realmente el caso? Obviamente en C# funciona. ¿Está haciendo string s = "A" + "B"
en C# azúcar sintáctico especial al que el compilador de expresiones no tiene acceso?
Seguimiento supongo: ¿Por qué no el compilador expresión hacer la misma magia como el compilador de C# ? – Shlomo
Para responder al seguimiento, ¿por qué debería hacerlo? Si bien hay idiomas que usan '+' como un operador de concatenación, así como un operador de suma en los tipos numéricos, eso no es universal (otros operadores comunes de concat incluyen '.',' || ',' & ',' << ') e incluso aquellos que sí usan' + 'lo llaman * concatenación * en ese contexto. El método 'Expression.Add' se llama' Add' y se puede esperar que haga una adición y no haga nada más (a menos que un tipo tenga '' sobrecargado) pero dado que internamente se trata de un método llamado 'op_addition', el tipo está reclamando es un * add *). –