-2

我在 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); 

谢谢!

4

1 回答 1

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

于 2013-05-29T21:50:54.537 回答