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 でそれを実行できればさらに便利です。私は何か見落としてますか ?
[編集] 背景情報
アイデアは、2 つのオブジェクト表現間のアダプターを自動的に生成することです。「int [] [] 型のフィールドを持つコンテナ オブジェクトがあります」というメタ記述 (ある種の IDL) と、このコンテナの 2 つの表現があります。
// Internal representation
public class InternalContainer {
int[][] myArray;
}
// Network representation
public class NetworkContainer {
int[][] myArray;
}
したがって、任意のサイズの配列に適応できるコードを生成するという問題があります。