Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.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#_Unity3d_Struct_Operators_Operand - Fatal编程技术网

C# 正在尝试定义==和!=运算符,但我一直得到;运算符“==';无法应用于操作数…“;

C# 正在尝试定义==和!=运算符,但我一直得到;运算符“==';无法应用于操作数…“;,c#,unity3d,struct,operators,operand,C#,Unity3d,Struct,Operators,Operand,我正在尝试实现笛卡尔二维整数坐标系。我已设法让+、-、*和/或操作员工作。然而,在以同样的方式实现==运算符之后,我得到了错误 我的结构定义如下: public struct IntVector2 : IEquatable<IntVector2> { // properties public int x { get; private set; } public int y { get; private set; } // constructors

我正在尝试实现笛卡尔二维整数坐标系。我已设法让+、-、*和/或操作员工作。然而,在以同样的方式实现==运算符之后,我得到了错误

我的结构定义如下:

public struct IntVector2 : IEquatable<IntVector2>
{
    // properties
    public int x { get; private set; }
    public int y { get; private set; }

    // constructors
    public IntVector2(int x, int y)
    {
        this.x = x;
        this.y = y;
    }

    // I have removed the XML documentation and operator definitions here
}
以及以下覆盖:

public override bool Equals(object obj)
{
    if (!(obj is IntVector2))
    {
        return false;
    }

    IntVector2 intVect2 = (IntVector2)obj;
    return (x == intVect2.x && y == intVect2.y);
}

public override int GetHashCode()
{
    return (x * 31 + y);
}
为了找到预先存在的答案,我调查了以下链接:

  • ---资讯及 使用相等运算符的演示

  • msdn.microsoft.com/en-us/library/c35t2ffz.aspx---相等运算符

  • msdn.microsoft.com/en-us/library/7h9bszxx(v=vs.100).aspx--msdn 实施平等运算符的准则

我所有的其他操作符都工作得很好,但是当我尝试比较2
IntVector2
s的相等性时,我得到了错误。例如:

void Foo(IntVector2 intVectA, IntVector2 intVectB)
{
    if (intVectA.Equals(intVectB))
    {
        IntVector2 C = intVectA + intVectB;
        bool isEqual = intVectA == intVectB;
    }
}
给出了错误

运算符“==”不能应用于“IntVector2”和类型的操作数 “IntVector2”

作为背景,我将此作为一种学习体验。我可以不使用它(使用
intVectA.x==intVectB.x&&intVectA.y==intVectB.y
),但如果我只是绕着这个问题转,我永远不会知道这是一个错误的原因


此外,my struct编译完全没有任何错误。

您试图将一个
IntVector2
与另一个
IntVector2
进行比较,但是您的
==
的实现=运算符采用
IntVector2
Vector2
。在您的问题中,我没有看到任何其他提到名为
Vector2
的类或结构的内容。那是打字错误吗?如果我将操作员更改为:

public static bool operator ==(IntVector2 a, IntVector2 b) { ... }
public static bool operator !=(IntVector2 a, IntVector2 b) { ... }

您丢失了<代码> ==/COD>实现>代码>公共静态BoOL运算符==(ItvcCeult2a,ItvcTeNe2b)< /C> >您可以考虑执行<代码>可比较的,因此Stutt可以与泛型一起使用。是的,这是正确的答案。我本来打算用Vector2和IntVector2实现相等运算符,但没有意识到我没有为这两个IntVector2定义相等运算符。我花了很多时间试图理解这个问题,并且把问题复杂化了。
public static bool operator ==(IntVector2 a, IntVector2 b) { ... }
public static bool operator !=(IntVector2 a, IntVector2 b) { ... }