介绍:
我有几个类,它们完成相同的工作,但使用不同的值类型(例如浮点数或整数的向量)。
现在我想要能够检查它们是否相等,这种相等性也应该适用于类型之间的比较(例如 vectorF == vectorI)。
另外,应该可以进行空检查(vectorF == null)。
方法:
我的方法是为 == 和 != 运算符创建多个重载,每一种可能的组合都要创建一个。
public sealed class VectorF
{
[...]
public static bool operator == (VectorF left, VectorI right)
{
// Implementation...
}
public static bool operator == (VectorF left, VectorF right)
{
// Implementation...
}
// Same for != operator
[...]
}
问题:使用多个重载函数时,我不能仅使用 == 运算符进行空值检查,因为调用会产生歧义。
var v = new VectorF([...]);
if (v == null) // This call is ambiguous
[...]
我知道可以使用 ReferenceEquals 或 null 强制转换来代替,但对我来说这种方法有很大的限制。
var v = new VectorF([...]);
if(object.ReferenceEquals(v, null)) // Would work, is not user friendly.
[...]
if(v == (VectorF)null) // Would also work, is neither user friendly.
[...]
问题:
有没有一种方法可以实现==运算符,使其允许简单的空值检查,并允许在不同向量之间进行相等比较?
或者,我还能/应该以另一种方式实现这个吗?
==
或者== null
。那么,如何使用其他类型的向量进行比较呢?例如,VectorF.IsSame(VectorI)
?当用户尝试vectorF == vectorI
时,编译器将显示用户错误,然后用户将搜索比较方法,问题解决了?另一件事:将float
与int
进行比较不会很精确,如何先将VectorF
转换为VectorI
,然后再比较两个VectorI
? - Sinatr