如何在不在.NET中声明委托的情况下将方法作为参数传递

Mar*_*lis 3 .net parameters methods delegates

无论我如何尝试,我都无法模仿Rhino Mocks的干净语法,而无需声明代表.

例:

Expect.Call(service.HelloWorld("Thanks"))
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

sis*_*sve 7

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

void Execute(Action action) {
    action();
}

void Test() {
    Execute(() => Console.WriteLine("Hello World!"));
}
Run Code Online (Sandbox Code Playgroud)


Cam*_*and 6

在3.5中使用Lambda语法可以获得类似的语法.

public void Call(Action action)
{
    action();
}

Expect.Call(() => service.HelloWorld("Thanks"));
Run Code Online (Sandbox Code Playgroud)

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

var mock = new Mock<IService>();
mock.Setup(service => service.HelloWorld("Thanks")).Returns(42);
Run Code Online (Sandbox Code Playgroud)