I tienen esta función:Operador con C# dinámico?
static void Func1<T>(T x, T y)
{
dynamic result = ((dynamic)x + y); //line 1
dynamic result2 = (x + y); //line 2
}
Esta func puede ser ejecutado como Func(1,2);
Sin embargo, la línea 1 es OK, mientras que la línea 2 va BANG (en tiempo de compilación).
La excepción lanzada de la línea 2 es:
operador '+' no se puede aplicar a operandos de tipo 'T' y 'T'
Por lo tanto, tenemos que crear un operador sobrecarga. Bien, hasta ahora todo bien.
Pero, ¿qué pasa con la línea 1? ¿No debería necesitar un molde dinámico también en y
?
((dynamic)x + (dynamic)y);
entiendo que está siendo evaluado en tiempo de ejecución, pero ¿por qué acepto el compilador de C# +
el operador en la línea 1 (es decir erróneamente asumen que T puede ser +
a otra cosa)?
¿Cuál es el valor en 'resultado' después de ejecutar el código? ¿Es '3' o '12'? Supongo que está haciendo concatenación de cadenas. – Servy
@Servy: ¿Qué te hace pensar que haría una concatenación de cadenas cuando 'T' es' int'? – LukeH