単一のパラメーターを持つデリゲートのインスタンスを作成する必要がある場合、ラムダ式を使用すると、非常に簡潔な方法でそのデリゲートを「インライン」で作成できます。たとえば、リスト内の特定の人物を名前で検索するコードは次のとおりです。
List<Person> list = new List<Person>();
// [..] Populate list here
Person jon = list.Find(p => p.Name == "Jon");
C# 2.0 では、もう少し長ったらしい匿名メソッドを使用できますが、それほど悪くはありません。
List<Person> list = new List<Person>();
// [..] Populate list here
Person jon = list.Find(delegate(Person p) { return p.Name == "Jon"; });
C# 1.0 では、追加のメソッド全体を作成する必要がありました。さらに、パラメーター化する場合は、別の型を作成する必要がありますが、匿名メソッドとラムダ式は実行環境 (ローカル変数など) をキャプチャするため、クロージャーのように動作します。
public Person FindByName(List<Person> list, String name)
{
return list.Find(p => p.Name == name); // The "name" variable is captured
}
これについては、クロージャに関する私の記事で詳しく説明しています。
デリゲートをメソッドに渡すことは、C# 2.0 と .NET 2.0 ではそれほど一般的ではありませんが、LINQ の基礎の大部分を占めているため、C# 3.0 と .NET 3.5 で頻繁に使用する傾向があります。