我正在尝试使用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;
}
因此,生成可以适应任何数组大小的代码的问题。