既然"User-defined conversions to or from a derived class are not allowed,"在我的情况下有没有像样的选择?



我的测量应用程序有一个继承自类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()方法来完成所建议的转换操作符所做的工作。

相关内容