平等的顺序是否存在差异?

时间:2011-01-04 03:05:56

标签: c#

或者简而言之,是否需要第二个运营商?

    public static bool operator ==(Vector3 v, float scalar)
    {
        return v.X == scalar && v.Y == scalar && v.Z == scalar;
    }

    public static bool operator ==(float scalar, Vector3 v)
    {
        return v == scalar;
    }

2 个答案:

答案 0 :(得分:4)

是的,如果您想允许非对称相等测试,则需要它:

bool foo = (yourVector3 == 5);    // requires the first version
bool bar = (5 == yourVector3);    // requires the second version

如果没有第一个版本,您将收到编译时错误,说“Operator'=='之类的内容不能应用于'Vector3'和'int'”类型的操作数。没有第二个版本,错误会说像“运算符'=='不能应用于'int'和'Vector3'类型的操作数。

答案 1 :(得分:2)

开发人员期望平等是可交换的,例如如果你这样做== b b == a也是有效的。因此,如果你做了一个并且它工作然后逆转它并且你得到以下错误将是混乱。

运算符'=='不能应用于'float'和'Vector3'

类型的操作数

但严格来说,不是你不必。它的味道真的很糟糕。