Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自";不允许向派生类或从派生类进行用户定义的转换;在我的情况下,有没有合适的替代方案?_C#_.net - Fatal编程技术网

C# 自";不允许向派生类或从派生类进行用户定义的转换;在我的情况下,有没有合适的替代方案?

C# 自";不允许向派生类或从派生类进行用户定义的转换;在我的情况下,有没有合适的替代方案?,c#,.net,C#,.net,我的测量应用程序有一个从类矩阵继承的类向量,该类向量公开了适用于一维向量类型矩阵的操作。可以预见,即使底层数组不是一维的,也会有人试图将矩阵向下转换为向量。然后,直到向量操作中出现异常,他们才知道有问题。但如果我尝试实施强制转换,即: public static explicit operator Vector3(Matrix m) { if (m.Array.GetLength(0) != 3 && m.Array.GetLength(1) != 1) th

我的测量应用程序有一个从类矩阵继承的类向量,该类向量公开了适用于一维向量类型矩阵的操作。可以预见,即使底层数组不是一维的,也会有人试图将矩阵向下转换为向量。然后,直到向量操作中出现异常,他们才知道有问题。但如果我尝试实施强制转换,即:

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]);
}

我得到了这个头衔的例外。有什么办法可以避免吗?

您的类型层次结构有问题<代码>向量首先不应该继承自矩阵——这是对经典的另一种理解

此外,将当前层次结构上的
矩阵
转换为
向量
是向下转换。向下播放永远不能保证安全,因此您的用户应该预料到向下播放可能会失败。你不应该试图掩盖这件事,即使你能做到


最后,没有什么可以阻止您提供一个
AsVector3()
方法来精确执行建议的转换运算符所做的操作。

感谢您提供了知识渊博的回答。什么样的向量不是矩阵?@BrandonArnold:实际上,这意味着“并非所有矩阵都是向量”,这当然不能描述你的层次结构。所以让我们假装那部分从未发生过