将Action委托作为内联函数使用是一种好习惯吗?

时间:2013-02-01 13:45:19

标签: .net delegates action inline

我经常会有一些重复的代码。

通常,我把它们放在一个函数中,但有时我讨厌这样做,因为:

  • 它需要太多参数
  • 代码通常非常特定于整体的一小部分。所以我最终有两个或三个功能只在一个地方使用。

因此,为了模拟C#中缺少的内联代码,我使用了Action委托:

public void Display(DateTime from, DateTime to)
{
    var start = from.ToOADate();
    var end = to.ToOADate();

    [...]

    // This Action delegate helps me not to repeat the code.
    var removePoints = new Action<Series>(serie =>
    {
        var pointsToRemove = serie.Points.Where(pt => pt.XValue < start || pt.XValue > end).ToArray();

        foreach (var pt in pointsToRemove)
            serie.Points.Remove(pt);
    });

    removePoints(FlameTemperatureSerie);
    removePoints(BoshGasFlowRateSerie);
    removePoints(PercCOSerie);
    removePoints(PercH2Serie);

    [...]
}

这非常有用,特别是因为Action委托执行上下文可以使用局部变量。

我对我好,但我从来没有看到过没有动作代表这样使用过。这就是为什么我想知道是否可以推荐这种做法,或者是否可能导致我不知道的问题。

2 个答案:

答案 0 :(得分:2)

只要它不会太混乱,那就没有错。

答案 1 :(得分:0)

如果一个函数只调用一次,如果它使代码更易于阅读和维护,那么它是完全有效的。