double[] vTessTriangles = (double[])swFace.GetTessTriangles(true);
double VTTx2 = vTessTriangles[2];
为什么我得到这个InvalidCastExpection
无法将“System.Single[]”类型的对象转换为“System.Double[]”类型。
double[] vTessTriangles = (double[])swFace.GetTessTriangles(true);
double VTTx2 = vTessTriangles[2];
为什么我得到这个InvalidCastExpection
无法将“System.Single[]”类型的对象转换为“System.Double[]”类型。
好吧,因为你不能投到single[]
-double[]
这应该工作:
float[] vTessTriangles = (float[])swFace.GetTessTriangles(true);
double VTTx2 = vTessTriangles[2];
你得到那个是因为 asingle[]
不能被转换为 a double[]
。如果可以,那么结果double[]
会认为每个元素都应该是双精度的。用于获取很好的元素;这些元素实际上是浮点数,但它们可以隐式转换为双精度数。问题在于设置元素。设置元素时,实际数组只能接受浮点数或浮点数的子类型,但如果将其强制转换为 adouble[]
它认为您可以设置双精度。Adouble
不能隐式转换为 a float
,因此这将是无效操作。
为了将 a 保存single[]
到 adouble[]
您需要创建一个新结构并复制所有元素,而不是仅仅转换整个数组。你可以自己做,但 LINQ 可以缩短一点:
double[] vTessTriangles = swFace.GetTessTriangles(true).Cast<double>().ToArray();