方法组的行为与la​​mbda不同?

Win*_*don 0 c# moq

Moq用来模拟一些界面.这里是:

var titleGenerator = new Mock<ITitleGenerator>();
titleGenerator.Setup(t => t.GenerateTitle()).Returns(Guid.NewGuid().ToString);

Console.WriteLine(titleGenerator.Object.GenerateTitle());
Console.WriteLine(titleGenerator.Object.GenerateTitle());
Run Code Online (Sandbox Code Playgroud)

它打印两次相同的值.但如果我用这个替换第二行:

titleGenerator.Setup(t => t.GenerateTitle()).Returns(() => Guid.NewGuid().ToString());
Run Code Online (Sandbox Code Playgroud)

它会在每次调用时返回唯一值.

我一直以为方法组只是lambda表达式的快捷方式.有什么区别吗?我试着在文档中搜索任何解释.有人可以开导我吗?

它看起来像方法组一次评估表达式并以某种方式缓存它?或者它有什么关系Moq

Pat*_*irk 9

在第一个示例中,您将传递ToString单个函数Guid,然后在每次调用时调用它.它相当于:

Guid guid = Guid.NewGuid();
titleGenerator.Setup(t => t.GenerateTitle()).Returns(guid.ToString)
Run Code Online (Sandbox Code Playgroud)

在第二个示例中,您将传递一个函数,该函数首先创建一个新函数,Guid然后ToString()在其上调用.