2013-05-29 61 views
-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); 

謝謝!

+11

怎麼樣發佈的錯誤? – shriek

+0

你得到哪個編譯器錯誤? – benestar

+4

「編譯錯誤」與「不返回true」不完全相同。這是什麼?假,還是編譯錯誤? – mpen

回答

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

+0

向他展示如何重載'=='運算符。或者轉介他一篇關於它的文章/問題。 – SimpleVar

+0

@YoryeNathan完成:) – basarat

+2

+1 Goooooooood。 – SimpleVar

相關問題