Orden de constructores / inicializadores estáticos en C #

Mientras trabajaba en una aplicación C #, me di cuenta de que en varios lugares, los inicializadores estáticos tienen dependencias entre sí, como esto:

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

Sin hacer nada especial que funcionara. ¿Eso es sólo suerte? ¿C # tiene reglas para resolver esto?

Editar: (re: Panos) En un archivo el orden léxico parece ser el rey? ¿Qué pasa con los archivos?

Al mirar probé una dependencia cíclica como esta:

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

y el programa no funcionó igual (el traje de prueba falló en todos los ámbitos y no busqué más).

Respuestas a la pregunta(4)

Su respuesta a la pregunta