我經常發現自己使用lambda表達式作爲某種「本地函數」使我的生活像的repetetive操作更加方便:什麼時候它太「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);
而不是一遍又一遍地寫的String.Format-的事情,我可以高興地用FormatF2吹走例如並節省了我自己的時間,當我需要改變某些格式時,只有一處進行編輯。 特別是當我只需要給定函數中的功能時,我很不情願將它們變成真正的函數。雖然上面的lambda表達式相對較小......有時我有一個較大的(以下應該將數據添加到一個表,打印輸出):
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;
};
同樣,我需要這個經常和的所有優點以上也適用。然而,正如你所看到的,這個對lambda表達式來說是相當長的。問題是:你什麼時候畫線?我最後的lambda太多了嗎?還有什麼其他的方式(除了使用真正的函數或試圖在容器中填充數據並循環使用它們)存在以避免一次又一次地寫入相同的代碼?
在此先感謝
基督教
如果它是一個在同一個函數中多次使用的複雜'string.format',那麼使用它就非常合理。問題是,當函數變得如此複雜時,最好將它作爲一個單獨的私有方法在你的類中提取出來。 – awe 2009-11-12 08:38:50