Object.Equals(x, y)
將:
- 返回true,如果
x
和y
都是空
- 返回false如果
x
或y
只有一個爲空
- 否則請致電
x.Equals(y)
或y.Equals(x)
- 它應該不是的問題。這意味着無論多態行爲是由執行時間類型的對象x
還是y
引用都會被調用。
ReferenceEquals
將不調用多態Equals
方法。它只是比較相等的參考。例如:
string x = new StringBuilder("hello").ToString();
string y = new StringBuilder("hello").ToString();
Console.WriteLine(Object.Equals(x, y)); // True
Console.WriteLine(Object.ReferenceEquals(x, y)); // False
Console.WriteLine(x == y); // True due to overloading
現在,如果你只檢查無效,那麼你真的不想要的多態行爲 - 只是參考平等。所以請隨時使用ReferenceEquals
。
你可以也使用==
,但是,可以是重載(未覆蓋)由類 - 它是在字符串的情況下,如上所示。在我的經驗,使用ReferenceEquals
最常見的情況是,當你實施==
:
public bool operator ==(Foo x1, Foo x2)
{
if (ReferenceEquals(x1, x2))
{
return true;
}
if (ReferenceEquals(x1, null) || ReferenceEquals(x2, null))
{
return false;
}
return x1.Equals(x2);
}
這裏你真的不要撥打的==
實現,因爲它會永遠遞歸 - 你想非常明確的引用平等語義。
你如何改變一個帖子的內容而不顯示爲已編輯? –
@Rune:如果您在發佈的前5分鐘內對其進行編輯,則不會顯示。 –