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

时间:2013-05-29 21:46:44

标签: 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 = p2;
bool equals = (p1 == p2); // Compile Error 
bool equals = (p2 == p3); // Compile Error 
bool equals = p1.Equals(p3); 
bool equals = p1.Equals(p2); 

谢谢!

1 个答案:

答案 0 :(得分:7)

它是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;
}

当你在这里时,你也可以在这里查看指南:http://msdn.microsoft.com/en-us/library/ms173147(v=vs.80).aspx