C # -Closure -Clarification

Ich lerne C # .Can ich meine Schließung alsa construct that can adopt the changes in the environment in which it is defined.

Beispiel:

List<Person> gurus = 
new List<Person>()
                 {
                  new Person{id=1,Name="Jon Skeet"},
                  new Person{id=2,Name="Marc Gravell"},
                  new Person{id=3,Name="Lasse"}
                 };            


void FindPersonByID(int id)
{
  gurus.FindAll(delegate(Person x) { return x.id == id; }); 
}

Die Variableid wird im Gültigkeitsbereich von FindPersonByID () deklariert, wir können jedoch weiterhin auf die lokale Variable zugreifenid innerhalb der anonymen Funktion (d. h.)delegate(Person x) { return x.id == id; }

(1) Ist mein Verständnis des Abschlusses korrekt?

(2) Was sind die Vorteile von Verschlüssen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage