Подтвердить что ты не робот

Оператор "op" не может быть применен к операндам типа "dynamic" и "lambda expression"

Я не могу применить двоичные операции к лямбда-выражениям, делегатам и группам методов.

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

Вторая строка дает мне ошибку: Operator '>>=' cannot be applied to operands of type 'dynamic' and 'lambda expression'

Почему?

Не является ли функциональность оператора определяемой моим пользовательским переопределением TryBinaryOperation?

4b9b3361

Ответ 1

Это не проблема с MyDynamicClass, проблема в том, что вы не можете иметь лямбда-выражение как динамическое. Это, однако, похоже, работает:

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

Если TryBinaryOperation выглядит так:

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

Тогда result будет равно 2. Вы можете использовать binder.Operation, чтобы определить, какая из двоичных операций это.

Ответ 2

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