C# ==运算符导致结构上的编译时错误

C# ==运算符导致结构上的编译时错误,c#,C#,我在MSDN站点上看到,如果两个操作数都是值类型,则==运算符将返回true 为了充分理解我声明了以下结构(据我所知,这些结构在C#中被视为值类型),并使用了==运算符,但由于某种原因我不理解,我得到了以下编译错误 有人知道为什么编译器会显示这些错误,即使p1和p2明显相等吗 struct Point { int m_X; int m_Y; } Point p1 = new Point(10, 15); Point p2 = new Point(10, 15); Point p3

我在MSDN站点上看到,如果两个操作数都是值类型,则==运算符将返回true

为了充分理解我声明了以下结构(据我所知,这些结构在C#中被视为值类型),并使用了==运算符,但由于某种原因我不理解,我得到了以下编译错误

有人知道为什么编译器会显示这些错误,即使p1和p2明显相等吗

struct Point {
  int m_X;
  int m_Y;  
}

Point p1 = new Point(10, 15);
Point p2 = new Point(10, 15);
Point p3 = p2;
bool equals = (p1 == p2); // Compile Error 
bool equals = (p2 == p3); // Compile Error 
bool equals = p1.Equals(p3); 
bool equals = p1.Equals(p2); 
谢谢

这是C#中的编译错误,因为没有为结构提供此实现

要获得此功能,可以重载==运算符

public static bool operator ==(Point a, Point b)
{
    // Return true if the fields match:
    return a.m_X == b.m_X && a.m_Y == b.m_Y;
}

同时,您也可以在此处查看指导原则:

发布错误如何?您会遇到哪些编译器错误?一个“编译错误”与“不返回true”完全不同。是哪一个?False,或编译错误?向他演示如何重载
=
运算符。或者让他看一篇关于它的文章/问题。