什么时候"lambda行动"太多了?

Chr*_*ian 12 c# lambda coding-style

我经常发现自己使用lambdas作为某种"本地功能",通过像以下那样的重复操作让我的生活变得更轻松:

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);
Run Code Online (Sandbox Code Playgroud)

而不是一遍又一遍地编写String.Format-thing,我可以愉快地吹掉FormatF2,例如节省自己的时间,当我需要改变格式化的东西时,只有一个地方可以进行编辑.特别是当我只需要给定函数中的功能时,我非常不愿意将它们变成一个真正的函数.虽然上面的lambdas相对较小...有时我会有较大的那些(以下是应该将数据添加到表中以进行打印输出):

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;
};
Run Code Online (Sandbox Code Playgroud)

同样,我经常需要这个,上面的所有好处也适用.但是,正如你所看到的,这个对于lambda表达式来说很长.问题是:你什么时候画线?我的最后一个lambda太多了吗?还有什么其他方法(除了使用实际函数或尝试将数据填充到容器中并循环遍历它们)以避免一遍又一遍地编写相同的代码?

提前致谢

基督教

awe*_*awe 11

它是您在方法中可能多次使用的东西,而且只在该方法中使用.我喜欢这个主意.如果它不会使您的代码难以阅读,请执行此操作.我会说你应该重新考虑一下,如果你发现很难看出lambda函数的内容与方法的真实内容是什么.在这种情况下,将它拉出一个单独的私有方法可能更干净.

最后,这真的是品味问题......


peS*_*HIr 6

我同意敬畏:对于方法(甚至是类)中的小规模重用,这是完美的.像string.Format例子一样.我经常使用这个.它与使用多次使用的中间值的局部变量基本相同,但是对于代码而言.

你的第二个例子似乎是在推动它.不知怎的,这让我感觉私有方法AddSurfaceData(可能是静态的,取决于它的使用?)会更合适.这当然超出了你的背景,所以要运用自己的判断力.