次のようなコードがありました。
double dTest1, dTest2;
int iTest1, iTest2;
dTest1 = 15.0;
dTest2 = 20.0;
array<int^,2>^ arr2Test = gcnew array<int^,2>(dTest1, dTest2);
iTest1 = arr2Test->GetLength(0);
iTest2 = arr2Test->GetLength(1);
2D 配列の長さは可変で、長さ情報は 2 つの double 変数に格納されていました。うまくいかないことが判明しました:
iTest1 = 1077149696
iTest2 = 0
ここで何がうまくいかないのですか? コンパイラーまたはインタープリターは、配列の長さに double 変数を使用できませんか?
実際には、1D配列がある場合に機能します:
array<int^>^ arrTest = gcnew array<int^>(dTest1);
iTest1 = arrTest->GetLength(0);
--> iTest1 = 15
上記の問題の解決策は、int への明示的なキャストです。これはとにかく行う必要がありますが、忘れることもできます (コンパイラの警告を気にしない場合)。
array<int^,2>^ arr2Test = gcnew array<int^,2>((int)dTest1, (int)dTest2);