【问题标题】:Operator 'op ' cannot be applied to operands of type 'dynamic' and 'lambda expression'运算符“op”不能应用于“动态”和“lambda 表达式”类型的操作数
【发布时间】:2011-10-25 23:56:07
【问题描述】:

我似乎无法将二元运算应用于 lambda 表达式、委托和方法组。

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

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

为什么?

运算符功能不是由我的自定义TryBinaryOperation 覆盖确定的吗?

【问题讨论】:

    标签: c# dynamic


    【解决方案1】:
    dynamic MyObject = new MyDynamicClass();
    MyObject >>= new Func<int>(() => 1 + 1);
    

    【讨论】:

      【解决方案2】:

      MyDynamicClass 不是问题,问题是您不能将 lambda 表达式作为动态表达式。然而,这似乎确实有效:

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

      如果TryBinaryOperation 看起来像这样:

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

      那么result 将是 2。您可以使用binder.Operation 来确定这是哪个二进制操作。

      【讨论】:

      • 这很有趣且令人惊讶;我现在在手机上,但我必须稍后再看!
      • @Marc Gravell:我认为第二个操作数必须是 int 的限制仅在您定义运算符时才被强制执行,而不是在您使用它时。
      • @ShdNx - 奇怪的是,如果你愿意,你可以返回一个字符串。
      • the problem is that you can't have a lambda expression as a dynamic 对此有解释吗?
      • 这让我很感兴趣——你说得对,这是可能的;在这里写下我的例子:marcgravell.blogspot.com/2011/08/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 2020-10-19
      • 2014-05-27
      • 2015-01-25
      • 2011-12-31
      • 2011-04-03
      相关资源
      最近更新 更多