运算符'op'不能应用于'dynamic'和'lambda expression'类型的操作数

Con*_*ark 13 c# dynamic

我似乎无法将二进制操作应用于lambda表达式,委托和方法组.

dynamic MyObject = new MyDynamicClass();
MyObject >>= () => 1 + 1;
Run Code Online (Sandbox Code Playgroud)

第二行给我错误: Operator '>>=' cannot be applied to operands of type 'dynamic' and 'lambda expression'

为什么?

操作员功能不是由我的自定义TryBinaryOperation覆盖决定的吗?

vcs*_*nes 13

这不是问题MyDynamicClass,问题是你不能将lambda表达式作为动态.但是,这似乎确实有效:

dynamic MyObject = new MyDynamicClass();
Func<int> fun = () => 1 + 1;
var result = MyObject >>= fun;
Run Code Online (Sandbox Code Playgroud)

如果TryBinaryOperation看起来像这样:

result = ((Func<int>) arg)();
return true;
Run Code Online (Sandbox Code Playgroud)

然后result将是2.您可以使用它binder.Operation来确定这是哪个二进制操作.

  • 这引起了我的兴趣 - 你是绝对正确的,这是可能的; 在这里写下我的例子:http://marcgravell.blogspot.com/2011/08/shifting-expectations-non-integer-shift.html (4认同)