Frage

In einer Frage Antwort ich die folgende Codierung Spitze finden: -

2) einfach lambda mit einem Parameter:

x => x.ToString() //simplify so many calls

Als jemand, der noch nicht 3.0 verwendet hat ich weiß nicht wirklich, diesen Tipp verstehen, aber es sieht interessant, so würde ich eine expantion auf schätzen, wie dies vereinfacht Anrufe mit einigen Beispielen.

Ich habe recherchiert lambdas so I denken Ich weiß, was sie tun, aber ich können nicht ganz verstehen so ein kleine auspacken könnte auch sein, um.

War es hilfreich?

Lösung

Wenn Sie eine Instanz eines Delegaten erstellen müssen, die einen einzelnen Parameter hat, Lambda-Ausdrücke können Sie diesen Delegaten „inline“ in einer sehr übersichtlichen Art und Weise erstellen. Zum Beispiel, hier ist Code, um eine bestimmte Person in einer Liste zu finden, die durch ihren Namen:

List<Person> list = new List<Person>();
// [..] Populate list here
Person jon = list.Find(p => p.Name == "Jon");

In C # 2.0 Sie könnte eine anonyme Methode verwenden, die ein wenig mehr langatmig war, aber nicht zu schlecht:

List<Person> list = new List<Person>();
// [..] Populate list here
Person jon = list.Find(delegate(Person p) { return p.Name == "Jon"; });

In C # 1.0 würden Sie haben eine ganze zusätzliche Methode zu erstellen. Darüber hinaus, wenn Sie es parametrisieren wollte, dann würden Sie eine andere Art erstellen müssen, während anonyme Methoden und Lambda-Ausdrücke erfassen ihre Ausführungsumgebung (lokale Variablen usw.), so dass sie wirken wie Verschlüsse:

public Person FindByName(List<Person> list, String name)
{
    return list.Find(p => p.Name == name); // The "name" variable is captured
}

Es gibt mehr dazu im mein Artikel über Schließungen .

Während der Delegierten in Methoden ist nicht sehr häufig in C # 2.0 und .NET 2.0, es ist ein großer Teil der Basis von LINQ - so dass Sie neigen dazu, es eine Menge in C # 3.0 mit .NET 3.5 zu verwenden

Andere Tipps

Diese im Grunde erweitert um:

private string Lambda(object x) {
  return x.ToString();
}

Sind Sie mit C # 2.0 anonymen Methoden? Diese beiden Anrufe sind äquivalent (vorausgesetzt Somemethod akzeptiert einen Delegaten usw.):

SomeMethod(x => x.ToString());

SomeMethod(delegate (SomeType x) { return x.ToString();});

Ich weiß, das ich lieber geben ...

string delegate(TypeOfX x)
{
  return x.ToString();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top