2

我的测量应用程序有一个继承自 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]);
}

我得到了标题的例外。有什么办法可以避免吗?

4

1 回答 1

3

您的类型层次结构有问题。Vector不应该从Matrix一开始就继承——这是对经典圆/椭圆问题的另一种看法。

此外,在当前层次结构上将a 强制转换Matrix为 a是向下强制转换。Vector向下转换永远不能保证安全,因此您的用户应该预料到转换可能会失败。你不应该试图掩盖这一点,即使你可以做到。

最后,没有什么能阻止您提供一种AsVector3()方法来完全执行建议的转换运算符所做的事情。

于 2013-02-25T17:44:27.647 回答