简介:
我有几个类做同样的工作,但具有不同的值类型(例如浮点数或整数向量)。
现在我希望能够检查相等性,这种相等性也应该在类型之间起作用(例如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 检查,并允许在不同向量之间进行相等检查?
或者,还有另一种方法我可以/应该如何实现这个?