У меня часто есть фрагмент кода, который повторяется.
Обычно я помещаю их в функцию, но иногда мне это не нравится, потому что:
- для этого требуется слишком много параметров
- код обычно очень специфичен для небольшой части целого. Поэтому я, наконец, имею две или три функции, которые используются только в одном месте.
Итак, чтобы имитировать код Inline, отсутствующий в С#, я использую делегаты 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 может использовать локальные переменные.
Мне кажется хорошо, но я никогда не видел нигде делегатов Action, которые использовали этот путь. Вот почему я хотел бы знать, можно ли рекомендовать эту практику или если это может вызвать проблемы, о которых я не знаю.