5

デバッグしようとしている次のコードがあります

int ll(ref float[,] _lv) {
  object[] results = new object[20];

  results = func_v1(11, _lv);

}

変数の「結果」を確認するために中断すると、以下のようなものが表示されます

results {object[11]}
 + [0] {float[1,1]}
 + [1] {double[1,1]}
 + [2] {float[48,1]}
   ...
   ...
 + [10] {float[1,1]}

キャストを入力して値を取得することはできません

float f = (float)results[0];無効なキャスト例外をスローします。

このオブジェクト配列とは何か、そしてそこから値を取得する方法を理解するのを手伝ってください。

よろしく。ああ

4

4 に答える 4

5

ここで読むことができる多次元配列を使用しています: http://msdn.microsoft.com/en-us/library/2yd9wwz4(v=vs.71).aspx

適切にキャストする必要があります

var f = (float[,])results[0]
于 2012-10-03T17:50:20.733 に答える
1

float f = (float)results[0];無効なキャスト例外をスローします。

私はあなたが必要だと思います

float[,] f = (float[,])results[0];
double[,] d = (double[,])results[1];
于 2012-10-03T17:50:08.567 に答える
1

インデックス 0 のアイテムは a ではありませんfloat- それは afloat[,]です。

于 2012-10-03T17:50:20.600 に答える
0

明らかに、object[] の結果にはフロートが含まれていません。func_v1 に移動して、何が返されているかを確認する必要があります。明らかに、オブジェクトにダウンキャストされているものを返します。これは何でもかまいません。貼り付けた出力から、2 次元の float と double が混在するオブジェクト配列を返しているように見えます。

(float[,])results[0] をキャストしようとすることもできますが、実際には double[,] であるアイテムに対してキャストすると明らかに失敗します。func_v1() を変更できない場合は、アイテムのタイプを切り替える必要があります。

例: if (results[0].GetType() == typeof(float[,]))

于 2012-10-03T17:56:32.937 に答える