-4
double[] vTessTriangles = (double[])swFace.GetTessTriangles(true);
                    double VTTx2 = vTessTriangles[2];

なぜ私はこれを手に入れるのかInvalidCastExpection

タイプ'System.Single[]'のオブジェクトをタイプ'System.Double[]'にキャストできません。

4

2 に答える 2

2

まあ、キャストできないのでsingle[]-double[]これはうまくいくはずです:

float[] vTessTriangles = (float[])swFace.GetTessTriangles(true);
double VTTx2 = vTessTriangles[2];
于 2012-11-19T14:52:02.590 に答える
0

single[]aを a にキャストできないため、これが得られますdouble[]。可能であれば、その結果double[]はすべての要素が double であるべきだと考えます。要素をフェッチする場合は問題ありません。要素は実際には float ですが、暗黙的に double に変換できます。問題は設定要素にあります。要素を設定するとき、実際の配列は float または float のサブタイプのみを受け入れることができますが、それを a にキャストするとdouble[]、double を設定できると考えられます。doubleを暗黙的に に変換することはできないためfloat、無効な操作になります。

single[]aを aに保存するにdouble[]は、配列全体をキャストするだけでなく、新しい構造を作成してすべての要素をコピーする必要があります。これは自分で行うこともできますが、LINQ を使用すると少し短縮できます。

double[] vTessTriangles = swFace.GetTessTriangles(true).Cast<double>().ToArray();
于 2012-11-19T15:28:55.870 に答える