Mit Lambda-Expressions in C# den Code verkürzen

Lambda-Expressions sind zwar schon ein alter Hut in C#, trotzdem möchte ich auch mal ein kleines Beispiel bringen, wo diese Dinger ungemein praktisch sind. Sie verkürzen nicht nur die LOC sonder tragen meiner Meinung nach ganz wesentlich dazu bei, den Code auch übersichtlich zu behalten.

Ich verwende es um in einem Silverlight WCF-RIA Projekt die Callbacks des asynchronen Webserviceaufrufs entgegenzunehmen. Um den Unterschied zu verdeutlichen, das ganze natürlich in der klassischen „Vorher / Nachher“-Variante

Vorher: Natürlich zuerst einmal ohne Lambdas, 3 Methoden, 17 Zeilen Code:

public override void LoadData() {
  LoadOperation loadOperationCountry = _context.Load(_context.GetCountrySetQuery(), loadOperationCountryCallback, null);
  LoadOperation loadOperationCustomer = _context.Load(_context.GetCustomerSetQuery(), loadOperationCustomerCallback, null);
}

void loadOperationCustomerCallback(LoadOperation customers) {
  if (customers != null) {
    Customers = new ObservableCollection(customers.Entities);
    CurrentCustomer = Customers[0];
  }
}

void loadOperationBranchCallback(LoadOperation branches) {
  if (branches != null) {
    Branches = new ObservableCollection(branches.Entities);
  }
}

Nachher: 11 Zeilen Code, also ca. 1/3 weniger, und nur mehr 1 Methode. Man muss also nicht mehr aufpassen, dass man die Methoden im Quellcode zusammenhält um später mal nicht so lange suchen zu müssen wo denn nu der verdammte Quellcode für den Callback ist.

public override void LoadData() {
  LoadOperation loadOperationCountry = _context.Load(_context.GetCountrySetQuery(), 
    (e) => {
      if (e!=null) Countries = new ObservableCollection(e.Entities);
    }, null);

  LoadOperation loadOperationCustomer = _context.Load(_context.GetCustomerSetQuery(), 
    (e) => { 
      if (e != null) Customers = new ObservableCollection(e.Entities); 
    }, null);
}