Un poco de información básica:
Como se dijo, si desea tener una colección dinámica de cosas, use un List<T>. Internamente, una lista también usa una matriz para el almacenamiento. Esa matriz tiene un tamaño fijo como cualquier otra matriz. Una vez que se declara que una matriz tiene un tamaño, no cambia. Cuando agrega un elemento a List, se agrega a la matriz. Inicialmente, Listcomienza con una matriz que creo que tiene una longitud de 16. Cuando intentas agregar el elemento 17 al List, lo que sucede es que se asigna una nueva matriz, eso es (creo) el doble del tamaño de la anterior , entonces 32 ítems. Luego, el contenido de la matriz anterior se copia en la nueva matriz. Entonces, si bien Listpuede parecer dinámico para el observador externo, internamente también debe cumplir las reglas.
Y como habrás adivinado, la copia y asignación de las matrices no es gratuita, por lo que uno debería apuntar a tener la menor cantidad posible de ellas y, para ello, puedes especificar (en el constructor de List) un tamaño inicial de la matriz, que en un escenario perfecto es lo suficientemente grande para contener todo lo que quieras. Sin embargo, esto es una microoptimización y es poco probable que alguna vez le importe, pero siempre es bueno saber lo que está haciendo realmente .
List<int[]> myInts = new List<int[]>();podría funcionar.