上記の例は、前に尋ねた別の質問への回答からのものであることがわかります。私はあなたが何をしようとしているのかまだ完全にはわかりません、そしてイアン・マーサーが示唆したように、それは書かれているようにかなり無意味です。しかし、それが何をするのかを理解しようとしているだけなら、最初に実用的な例を見てみましょう:
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()メソッドに渡され、テンプレートのビルドおよび構成時に実行されるパラメーターとして関数を宣言しています。コードを1行ずつ(たとえば、Visual StudioのF11)ステップ実行し、ラムダ式自体にブレークポイントを設定してから、呼び出しスタックを確認することで、どのように機能するかを理解できます。
ラムダの構文について混乱している場合(矢印の構文は、最初に慣れたときには確かに少し複雑です)、MSDNの記事をチェックするか、Googleの「c#ラムダ」を心からチェックしてください。喜び。