Каждый 4-строчный фрагмент кода должен быть в своем собственном методе. Что-то вроде
ExecuteCode_A(){/*...*/}
Затем вы можете создать делегат без параметров с именем CodeExecutor. Создайте экземпляр делегата для каждого блока кода, указывающего на правильный метод. Передайте массив, загруженный экземплярами делегатов в правильном порядке (или список, или что-то) в вашу основную функцию. Итерируйте по нему, вызывая каждого делегата.
Есть еще один похожий метод. Создайте интерфейс с именем ICodeBlockRunner, который определяет метод с именем Run (). Для каждого уникального блока кода создайте класс, который реализует интерфейс и реализует метод Run () для выполнения 4 строк кода. Тогда ваша функция примет Array (или что-то Enumerable) из ICodeBlockRunners (экземпляры классов, которые, конечно, реализуют ICodeBlockrunner) в нужном порядке. Вы перебираете значения и вызываете Run () для каждого ICodeBlockRunner.