私はしばしば、繰り返されるコードをいくつか持っています。
通常、私はそれらを関数に入れますが、次の理由でこれを行うのが嫌いな場合があります。
- パラメータが多すぎます
- コードは通常、全体の一部に非常に限定されています。そのため、最終的には 1 か所でのみ使用される 2 つまたは 3 つの関数ができました。
したがって、C# にはないインライン コードをシミュレートするために、アクション デリゲートを使用します。
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 デリゲートがこのように使用されているところは見たことがありません。そのため、このプラクティスが推奨されるかどうか、または私が知らない問題を引き起こす可能性があるかどうかを知りたいのです。