Alternative for two sequentially executed loops with identical ranges
You could also define something like

private void MyLoop&lt;T&gt;(Action&lt;T&gt; action, IEnumerable&lt;T&gt; dataList) 
{
    foreach (var data in dataList)
    {
        action(data);
    }
}


and use it

MyLoop(Process, dataList);


or using Action

Action&lt;Action&lt;int&gt;&gt; myLoop= action =&gt;
{
    foreach (var data in dataList)
    {
        action(data);
    }
};


and use it like this

myLoop(Process);