我看到上面的示例来自对您之前提出的另一个问题的回答。我仍然不完全确定您要做什么,并且正如 Ian Mercer 所建议的那样,所写的内容毫无意义。但是,如果您只是想了解它的作用,那么让我们首先获取一个工作示例:
using System;
namespace ScratchApp
{
internal class Program
{
private static void Main(string[] args)
{
var mailTemplate = BuildMailTemplate(
mt => mt.MailBody = "hello world",
mt => mt.MailFrom = "rdingwall@gmail.com");
}
private static MailTemplate BuildMailTemplate(
Action<MailTemplate> configAction1,
Action<MailTemplate> configAction2)
{
var mailTemplate = new MailTemplate();
mailTemplate.ConfigureWith(configAction1)
.ConfigureWith(configAction2)
.DoSomeOtherStuff()
.Build();
return mailTemplate;
}
}
public class MailTemplate
{
public string MailFrom { get; set; }
public string MailBody { get; set; }
public MailTemplate DoSomeOtherStuff()
{
// Do something
return this;
}
public MailTemplate Build()
{
// Build something
return this;
}
public MailTemplate ConfigureWith(Action<MailTemplate> func)
{
func(this);
return this;
}
}
}
这和以前一样毫无意义,但它建立了。当您调用 .ConfigureWith() 时发生的情况是,您不是传递一个普通值,而是传递一个函数。在上面的示例中,我实际上将函数声明为传递给 BuildMailTemplate() 方法的参数,然后在构建和配置模板时执行这些函数。您可以通过逐行单步执行代码(例如,Visual Studio 中的 F11)并在 lambda 表达式本身中设置断点,然后查看调用堆栈来了解它的工作原理。
如果您对 lambdas 的语法感到困惑 - 箭头语法在您刚开始习惯时确实有点复杂 - 请随时查看有关它的MSDN 文章,或者只是谷歌“c# lambdas”。喜。