Я пытаюсь использовать CodeDom для генерации кода C # (.Net 2.0), который будет делать следующее:
int[][] myArray = new int[someSize][];
В CodeDom для инициализации массива требуется CodeArrayCreateExpression . MSDN говорит:
Если язык допускает массивы массивов, их можно создать, вложив CodeArrayCreateExpression в CodeArrayCreateExpression.
Насколько я понимаю, единственная возможность - написать что-то вроде этого:
// Declaration and initialization of myArray
CodeVariableDeclarationStatement variable =
new CodeVariableDeclarationStatement("System.Int32[][]", "myArray",
new CodeArrayCreateExpression("System.Int32[][]",
new CodeExpression[] { new CodeArrayCreateExpression("System.Int32[]", 0) }));
Но это порождает это:
int[][] myArray = new int[][] { new int[0] };
Это не идеально, но я мог бы сделать с этим, если бы знал размер myArray во время генерации, а я нет.
Я мог бы написать функцию, которая выполняет инициализацию, и вызвать ее в CodeDom, но было бы лучше, если бы я мог сделать это в чистом CodeDom. Я что-то пропустил ?
[РЕДАКТИРОВАТЬ] Справочная информация
Идея состоит в том, чтобы автоматически генерировать адаптер между двумя представлениями объектов. У меня есть мета-описание (своего рода IDL), говорящее: «У меня есть контейнерный объект с полем типа int [] []» и два представления этого контейнера:
// Internal representation
public class InternalContainer {
int[][] myArray;
}
// Network representation
public class NetworkContainer {
int[][] myArray;
}
Таким образом, возникает вопрос генерации кода, который может адаптироваться к массиву любого размера.