2011-08-12 18 views
13

Parece que no puedo aplicar operaciones binarias a expresiones lambda, delegados y grupos de métodos.El operador 'op' no se puede aplicar a operandos de tipo 'dinámico' y 'expresión lambda'

dynamic MyObject = new MyDynamicClass(); 
MyObject >>=() => 1 + 1; 

La segunda línea me da error: Operator '>>=' cannot be applied to operands of type 'dynamic' and 'lambda expression'

¿Por qué?

¿No es la funcionalidad del operador determinada por mi anulación personalizada TryBinaryOperation?

Respuesta

13

No es un problema con MyDynamicClass, el problema es que no se puede tener una expresión lambda como dinámica. Esto, sin embargo, no parecen funcionar:

dynamic MyObject = new MyDynamicClass(); 
Func<int> fun =() => 1 + 1; 
var result = MyObject >>= fun; 

Si el TryBinaryOperation se parece a esto:

result = ((Func<int>) arg)(); 
return true; 

Entonces result habrá 2. Puede utilizar binder.Operation para determinar qué operación binaria que es esto.

+0

Esto es interesante y sorprendente; Estoy en el móvil en este momento, pero debo ver esto más adelante. –

+0

@Marc Gravell: Creo que la restricción de que el segundo operando debe ser un int se aplica solo cuando se define el operador, y no cuando se usa. – ShdNx

+0

@ShdNx - lo curioso es que podría devolver una cadena si quisiera. – vcsjones

2
dynamic MyObject = new MyDynamicClass(); 
MyObject >>= new Func<int>(() => 1 + 1); 
Cuestiones relacionadas