-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

你得到那个是因为 asingle[]不能被转换为 a double[]。如果可以,那么结果double[]会认为每个元素都应该是双精度的。用于获取很好的元素;这些元素实际上是浮点数,但它们可以隐式转换为双精度数。问题在于设置元素。设置元素时,实际数组只能接受浮点数或浮点数的子类型,但如果将其强制转换为 adouble[]它认为您可以设置双精度。Adouble不能隐式转换为 a float,因此这将是无效操作。

为了将 a 保存single[]到 adouble[]您需要创建一个新结构并复制所有元素,而不是仅仅转换整个数组。你可以自己做,但 LINQ 可以缩短一点:

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