ValueType.Equals(Object) 方法

定義

指出這個實例和指定的物件是否相等。

public:
 override bool Equals(System::Object ^ obj);
public override bool Equals(object obj);
public override bool Equals(object? obj);
override this.Equals : obj -> bool
Public Overrides Function Equals (obj As Object) As Boolean

參數

obj
Object

要與當前實例比較的物件。

傳回

trueobj 與 該實例為相同型態且代表相同值;否則, false

範例

以下範例說明如何透過導出值類型覆寫該 Equals 方法。

public struct Complex
{
    public double m_Re;
    public double m_Im;

    public override bool Equals( object ob ){
        if( ob is Complex ) {
            Complex c = (Complex) ob;
            return m_Re==c.m_Re && m_Im==c.m_Im;
        }
        else {
            return false;
        }
    }

    public override int GetHashCode(){
        return m_Re.GetHashCode() ^ m_Im.GetHashCode();
    }
}
type Complex() =
    member val m_Re = 0. with get, set
    member val m_Im = 0. with get, set

    override this.Equals(ob) =
        match ob with
        | :? Complex as c ->
            this.m_Re = c.m_Re && this.m_Im = c.m_Im
        | _ -> false
        
    override this.GetHashCode() =
        this.m_Re.GetHashCode() ^^^ this.m_Im.GetHashCode()
Public Structure Complex
   Private m_Re As Double
   Private m_Im As Double
       
   Public Overloads Function Equals(ob As Object) As Boolean
      If TypeOf ob Is Complex Then
         Dim c As Complex = CType(ob, Complex)
         Return m_Re = c.m_Re And m_Im = c.m_Im
      Else
         Return False
      End If
   End Function
   
   
   Public Overloads Function GetHashCode() As Integer
      Return m_Re.GetHashCode() ^ m_Im.GetHashCode()
   End Function

End Structure

備註

ValueType.Equals(Object) 方法覆蓋 Object.Equals(Object),並提供 .NET 中所有值型態的預設值相等實作。

預設實作呼叫在當前實例的每個欄位 和 Object.Equals(Object) 上,若所有欄位相等,則會回傳。objtrue

.NET 9 及以後版本,預設實作的 ValueType.Equals(Object) 若對型別套用 NotSupportedException,則拋出 InlineArrayAttribute

Important

特別是如果你的值型別包含參考型別欄位,你應該覆寫該 Equals(Object) 方法。 這能提升效能,並讓你更貼近該類型平等的意義。

Windows 運行時間的注意事項

當你呼叫 Windows 執行階段 結構上的 Equals 方法時,它會為不會覆蓋 Equals 的值類型提供預設行為。 這是 .NET 為 Windows 運行時間提供的支援的一部分(請參閱 Windows 市集應用程式和 Windows 運行時間的 .NET 支援)。 Windows 執行階段結構無法覆蓋Equals,即使它們是用 C# 或 Visual Basic 寫的,因為它們無法有方法。 (此外,Windows 執行階段中的結構本身不會繼承ValueType。)不過,當你在 C# 或 Visual Basic 程式碼中使用它們時,它們似乎有 ToStringEqualsGetHashCode 方法,且 .NET 會為這些方法提供預設行為。

適用於