我在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);
谢谢!
答案 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