Spesso mi capita utilizzando lambda come una sorta di "funzioni locali" per rendere la vita più facile con le operazioni ripetitiva come quelli:Quando è troppo "azione lambda"?
Func<string, string> GetText = (resource) => this.resourceManager.GetString(resource);
Func<float, object, string> FormatF1 = (f, o) => String.Format("{0:F1} {1}", f, o);
Func<float, object, string> FormatF2 = (f, o) => String.Format("{0:F2} {1}", f, o);
invece di scrivere lo String.Format-cosa più e più, posso felicemente soffiare via con FormatF2 es e risparmiare tempo e quando ho bisogno di cambiare qualcosa sulla formattazione, solo un posto per fare modifiche. Specialmente quando ho bisogno esclusivamente della funzionalità nella funzione data, sono molto riluttante a trasformarli in una funzione reale. Mentre il lambda sopra erano relativamente piccola ... a volte devo quelli più grandi come (si suppone quanto segue per aggiungere dati a una tabella per l'output di stampa):
Action<string, string, string> AddSurfaceData = (resource, col, unit) => {
renderTable.Cells[tableRowIndex, 0].Text = "\t" + this.GetText(resource);
renderTable.Cells[tableRowIndex, 1].Text = FormatF2(paraHydReader.GetFloat(paraHydReader.GetOrdinal(col)), "");
renderTable.Cells[tableRowIndex, 1].Style.TextAlignHorz = C1.C1Preview.AlignHorzEnum.Right;
renderTable.Cells[tableRowIndex, 2].Text = " " + this.GetText(unit);
renderTable.Cells[tableRowIndex, 2].Style.TextAlignHorz = C1.C1Preview.AlignHorzEnum.Left;
++tableRowIndex;
};
Anche in questo caso, ho bisogno di questo, spesso e tutti i vantaggi di sopra si applicano anche. Tuttavia, come puoi vedere, questo è piuttosto lungo per un'espressione lambda. La domanda è: quando disegni la linea? Il mio ultimo lambda è troppo? In quali altri modi (a parte l'utilizzo di funzioni reali o il tentativo di riempire i dati in contenitori e di ricollegarli) per evitare di scrivere lo stesso codice più e più volte?
Grazie in anticipo
Christian
Se è un 'string.format' complesso che viene usato molte volte nella stessa funzione, ha perfettamente senso usarlo. La domanda è davvero quando la funzione diventa così complicata che è meglio estrarla come metodo privato separato nella tua classe. – awe