Оператор "op" не может быть применен к операндам типа "dynamic" и "lambda expression"
Я не могу применить двоичные операции к лямбда-выражениям, делегатам и группам методов.
dynamic MyObject = new MyDynamicClass();
MyObject >>= () => 1 + 1;
Вторая строка дает мне ошибку: Operator '>>=' cannot be applied to operands of type 'dynamic' and 'lambda expression'
Почему?
Не является ли функциональность оператора определяемой моим пользовательским переопределением TryBinaryOperation
?
Ответы
Ответ 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);