ValueType.Equals(Object) ValueType.Equals(Object) ValueType.Equals(Object) ValueType.Equals(Object) Method


指示此实例与指定对象是否相等。Indicates whether this instance and a specified object are equal.

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


Object Object Object Object

要与当前实例进行比较的对象。The object to compare with the current instance.


如果 true 和该实例具有相同的类型并表示相同的值,则为 obj;否则为 falsetrue if obj and this instance are the same type and represent the same value; otherwise, false.


下面的示例演示如何将Equals派生的值的类型可以重写方法。The following example demonstrates how the Equals method can be overridden by a derived value type.

public ref struct Complex
   double m_Re;
   double m_Im;
   virtual bool Equals( Object^ ob ) override
      if ( dynamic_cast<Complex^>(ob) )
         Complex^ c = dynamic_cast<Complex^>(ob);
         return m_Re == c->m_Re && m_Im == c->m_Im;
         return false;

   virtual int GetHashCode() override
      return m_Re.GetHashCode() ^ m_Im.GetHashCode();
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();
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
         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 Framework 中的所有值类型都提供的值相等性的默认实现。The ValueType.Equals(Object) method overrides Object.Equals(Object) and provides the default implementation of value equality for all value types in the .NET Framework.

如果没有当前实例的字段和obj是引用类型,Equals方法执行逐字节比较的两个对象在内存中。If none of the fields of the current instance and obj are reference types, the Equals method performs a byte-by-byte comparison of the two objects in memory. 否则,它使用反射要比较的相应字段obj和此实例。Otherwise, it uses reflection to compare the corresponding fields of obj and this instance.


尤其是值类型包含所引用类型的字段,则应重写Equals(Object)方法。Particularly if your value type contains fields that are reference types, you should override the Equals(Object) method. 这可以提高性能并使您能够更好地表示的类型的相等性的含义。This can improve performance and enable you to more closely represent the meaning of equality for the type.

说明 Windows 运行时Windows RuntimeNotes for the Windows 运行时Windows Runtime

当您调用Equals方法Windows 运行时Windows Runtime结构,它不会覆盖的值类型提供的默认行为EqualsWhen you call the Equals method on a Windows 运行时Windows Runtime structure, it provides the default behavior for value types that don't override Equals. 这是.NET Framework 提供了有关支持的一部分Windows 运行时Windows Runtime(请参阅.NET Framework 支持的 Windows 应用商店应用程序和 Windows 运行时)。This is part of the support that the .NET Framework provides for the Windows 运行时Windows Runtime (see .NET Framework Support for Windows Store Apps and Windows Runtime). Windows 运行时Windows Runtime 结构不能重写Equals,即使它们编写与C#或 Visual Basic 中,因为它们不能包含方法。structures can't override Equals, even if they're written with C# or Visual Basic, because they can't have methods. (此外,结构中Windows 运行时Windows Runtime本身不继承ValueType。)但是,它们显示为具有ToStringEquals,和GetHashCode方法在 C# 或 Visual Basic 代码中,使用它们以及.NET Framework 提供的默认行为,这些方法时。(In addition, structures in the Windows 运行时Windows Runtime itself don't inherit ValueType.) However, they appear to have ToString, Equals, and GetHashCode methods when you use them in your C# or Visual Basic code, and the .NET Framework provides the default behavior for these methods.