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

要与当前实例进行比较的对象。

返回

如果 此实例的类型相同,并且表示相同的值,则为 ;否则为 < a1/ >。

示例

以下示例演示了如何 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) 当前实例的每个字段,并 obj 返回 true 所有字段是否相等。

.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为这些方法提供默认行为。

适用于