我的测量应用程序有一个继承自类Matrix的类Vector,它暴露了适合1D矢量型矩阵的操作。可以预见的是,即使底层数组不是一维的,也有人会尝试将矩阵向下转换为向量。然后,他们不会知道有问题,直到在其中一个Vector操作中出现异常。但如果我尝试实现强制类型转换,即:
public static explicit operator Vector3(Matrix m)
{
if (m.Array.GetLength(0) != 3 && m.Array.GetLength(1) != 1)
throw new InvalidCastException("The matrix dimensions are invalid.");
return new Vector3(m[0, 0], m[1, 0], m[2, 0]);
}
得到标题的例外。有什么办法可以避免吗?
您的类型层次结构有问题。Vector
首先不应该继承Matrix
——这是对经典圆/椭圆问题的另一种理解。
此外,在当前层次上将Matrix
转换为Vector
是向下转换。向下转换永远不能保证安全,因此您的用户应该预料到转换可能会失败。你不应该试图掩盖这一点,即使你有办法。
最后,没有什么可以阻止您提供AsVector3()
方法来完成所建议的转换操作符所做的工作。