I często znajduję się przy użyciu lambdy jako pewnego rodzaju „lokalnych” funkcji, aby moje życie łatwiejszym z repetetive operacji, takich jak te:Kiedy jest za dużo "akcji 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);
zamiast pisania string.Format-rzeczy w kółko, mogę szczęśliwie zdmuchnąć za pomocą FormatF2 np i zaoszczędzić czas i kiedy muszę zmienić coś na temat formatowania, tylko jedno miejsce do wprowadzania zmian. Szczególnie, gdy potrzebuję funkcji wyłącznie w danej funkcji, bardzo niechętnie zmieniam ją w prawdziwą funkcję. Choć lambdas powyżej były stosunkowo małe ... czasami mam większych tacy jak (Następujące ma dodać dane do tabeli dla wydruków):
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;
};
Znowu muszę to często i wszystkie korzyści płynące z powyżej również obowiązują. Jednak, jak widać, ten jest dość długi na wyrażenie lambda. Pytanie brzmi: Kiedy narysujesz linię? Czy moja ostatnia lambda jest zbyt duża? Jakie inne sposoby (poza używaniem rzeczywistych funkcji lub próbowaniem wypychania danych w kontenerach i pętlą nad nimi) istnieją, aby uniknąć pisania tego samego kodu w kółko?
góry dzięki
Christian
Jeśli jest złożonym 'string.format', który jest używany wiele razy w tej samej funkcji, ma to sens z jego używania. Pytanie brzmi, kiedy funkcja staje się tak skomplikowana, że lepiej jest ją wyciągnąć jako oddzielną prywatną metodę w swojej klasie. – awe