Я часто нахожу себя использующим лямбды как своего рода "локальные функции", чтобы облегчить мою жизнь повторными операциями, такими как:
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);
Вместо того, чтобы писать String.Format-вещь снова и снова, я могу с радостью сдуть FormatF2, например. и сэкономить время и когда мне нужно что-то изменить в отношении форматирования, только одно место для внесения изменений. Особенно, когда мне нужна функциональность только в данной функции, я очень неохотно превращаю их в настоящую функцию. В то время как лямбды выше были относительно небольшими... иногда у меня есть более крупные (например, предполагается добавить данные в таблицу для вывода на печать):
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;
};
Опять же, мне это нужно часто, и все преимущества вышеприведенного тоже. Однако, как вы можете видеть, это довольно длинное выражение для лямбды.. вопрос: когда вы рисуете линию? Моя последняя лямбда слишком много? Какие другие способы (кроме использования реальных функций или попытки заполнить данные в контейнерах и их цикл) существуют, чтобы не писать один и тот же код снова и снова?
Заранее спасибо
Christian