Порядок статических конструкторов / инициализаторов в C #

Работая над приложением C #, я только что заметил, что в некоторых местах статические инициализаторы имеют зависимости друг от друга, например:

static private List<int> a = new List<int>() { 0 };
static private List<int> b = new List<int>() { a[0] };

Не делая ничего особенного, что работало. Это просто удача? Есть ли в C # правила для решения этой проблемы?

Редактировать: (re: Panos) В файле лексический порядок кажется королем? как насчет файлов?

В поиске я попробовал циклическую зависимость, например, такую:

static private List<int> a = new List<int>() { b[0] };
static private List<int> b = new List<int>() { a[0] };

и программа не работала одинаково (тестовый костюм не прошел по всем направлениям, и я не смотрел дальше).

Ответы на вопрос(4)

Ваш ответ на вопрос