【问题标题】:How to pass a method as parameter without declaring a delegate in .NET如何将方法作为参数传递而不在 .NET 中声明委托
【发布时间】:2010-10-25 17:17:30
【问题描述】:

无论我如何尝试,我都无法在不声明委托的情况下模仿 Rhino Mocks 的简洁语法。

例子:

Expect.Call(service.HelloWorld("Thanks"))

您对如何做到这一点有任何想法吗?

谢谢。

【问题讨论】:

    标签: .net parameters methods delegates


    【解决方案1】:

    您可以使用较新版本的 .NET 中提供的 Action 委托

    void Execute(Action action) {
        action();
    }
    
    void Test() {
        Execute(() => Console.WriteLine("Hello World!"));
    }
    

    【讨论】:

      【解决方案2】:

      使用 3.5 中的Lambda 语法可以得到类似的语法。

      public void Call(Action action)
      {
          action();
      }
      
      Expect.Call(() => service.HelloWorld("Thanks"));
      

      Moq 是一个模拟框架,它使用 Lambda 语法进行模拟。

      var mock = new Mock<IService>();
      mock.Setup(service => service.HelloWorld("Thanks")).Returns(42);
      

      【讨论】:

        【解决方案3】:

        在 Rhino Mocks 中,它实际上是在调用方法。该对象当时处于设置模式,当您调用它时,它正在记录参数和设置期望。这就是您可以摆脱委托语法的原因。不幸的是,在许多其他情况下实际上是不可能的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-29
          • 2016-02-06
          相关资源
          最近更新 更多