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 实施平等运算符的准则
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) { ... }