Type.Equals Method

Definition

判斷目前 Type 的基礎系統類型,是否與指定的 ObjectType 的基礎系統類型相同。Determines if the underlying system type of the current Type is the same as the underlying system type of the specified Object or Type.

Overloads

Equals(Type)

判斷目前 Type 的基礎系統類型,是否與指定的 Type 之基礎系統類型相同。Determines if the underlying system type of the current Type is the same as the underlying system type of the specified Type.

Equals(Object)

判斷目前 Type 物件的基礎系統類型,是否與指定的 Object 的基礎系統類型相同。Determines if the underlying system type of the current Type object is the same as the underlying system type of the specified Object.

Equals(Type)

判斷目前 Type 的基礎系統類型,是否與指定的 Type 之基礎系統類型相同。Determines if the underlying system type of the current Type is the same as the underlying system type of the specified Type.

public:
 bool Equals(Type ^ o);
public:
 virtual bool Equals(Type ^ o);
public bool Equals (Type o);
public virtual bool Equals (Type o);
override this.Equals : Type -> bool
Public Function Equals (o As Type) As Boolean
Public Overridable Function Equals (o As Type) As Boolean

Parameters

o
Type

其基礎系統類型將與目前 Type 的基礎系統類型比較的物件。The object whose underlying system type is to be compared with the underlying system type of the current Type.

Returns

Boolean

如果 true 的基礎系統類型與目前 o 的基礎系統類型相同,則為 Type否則為 falsetrue if the underlying system type of o is the same as the underlying system type of the current Type; otherwise, false.

Implements

Examples

下列範例會使用 Equals 來比較兩種類型。The following example uses Equals to compare two types.


using System;
using System.Reflection;

class Example
{
    public static void Main()
    {

        Type a = typeof(System.String);
        Type b = typeof(System.Int32);

        Console.WriteLine("{0} == {1}: {2}", a, b, a.Equals(b));

        // The Type objects in a and b are not equal,
        // because they represent different types.

        a = typeof(Example);
        b = new Example().GetType();

        Console.WriteLine("{0} is equal to {1}: {2}", a, b, a.Equals(b));

        // The Type objects in a and b are equal,
        // because they both represent type Example.

        b = typeof(Type);

        Console.WriteLine("typeof({0}).Equals(typeof({1})): {2}", a, b, a.Equals(b));

        // The Type objects in a and b are not equal,
        // because variable a represents type Example
        // and variable b represents type Type.

        //Console.ReadLine();
    }
}

//
/* This code example produces the following output:
    System.String == System.Int32: False
    Example is equal to Example: True
    typeof(Example).Equals(typeof(System.Type)): False
*/
Imports System.Reflection



Class Example
    
    Public Shared Sub Main() 
        
        Dim a As Type = GetType(System.String)
        Dim b As Type = GetType(System.Int32)
        
        Console.WriteLine("{0} = {1}: {2}", a, b, a.Equals(b))
        ' The Type objects in a and b are not equal,
        ' because they represent different types.

        a = GetType(Example)
        b = New Example().GetType()
        Console.WriteLine("{0} is equal to {1}: {2}", a, b, a.Equals(b))
        ' The Type objects in a and b are equal,
        ' because they both represent type Example.

        b = GetType(Type)
        Console.WriteLine("typeof({0}).Equals(typeof({1})): {2}", a, b, a.Equals(b))
        ' The Type objects in a and b are not equal,
        ' because variable a represents type Example
        ' and variable b represents type Type.

        'Console.ReadLine()
    
    End Sub 
End Class
'
' This code example produces the following output:
'    System.String = System.Int32: False
'    Example is equal to Example: True
'    typeof(Example).Equals(typeof(System.Type)): False
'

See also

Equals(Object)

判斷目前 Type 物件的基礎系統類型,是否與指定的 Object 的基礎系統類型相同。Determines if the underlying system type of the current Type object is the same as the underlying system type of the specified Object.

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

Parameters

o
Object

其基礎系統類型將與目前 Type 的基礎系統類型比較的物件。The object whose underlying system type is to be compared with the underlying system type of the current Type. 為使比較成功,o 必須可以轉型或轉換為 Type 類型的物件。For the comparison to succeed, o must be able to be cast or converted to an object of type Type.

Returns

Boolean

如果 true 的基礎系統類型與目前 o 的基礎系統類型相同,則為 Type否則為 falsetrue if the underlying system type of o is the same as the underlying system type of the current Type; otherwise, false. 如果是下列情況,這個方法也會傳回 falseThis method also returns false if:

  • onull
  • o is null.

  • o 無法轉換為 Type 物件。
  • o cannot be cast or converted to a Type object.
  • Implements

    Examples

    下列範例會使用 Equals(Object) 來比較各種不同的 Type 物件實例與各種 Object 實例。The following example uses Equals(Object) to compare various Type object instances with various Object instances.

    using System;
    using System.Collections.Generic;
    using System.Reflection;
    
    public class Example
    {
       public static void Main()
       {
          Type t =typeof(int);
          Object obj1 = typeof(int).GetTypeInfo();
          IsEqualTo(t, obj1);
    
          Object obj2 = typeof(String);
          IsEqualTo(t, obj2);
          
          t = typeof(Object);
          Object obj3 = typeof(Object);
          IsEqualTo(t, obj3);
          
          t = typeof(List<>);
          Object obj4 = (new List<String>()).GetType();
          IsEqualTo(t, obj4);
          
          t = typeof(Type);
          Object obj5 = null;
          IsEqualTo(t, obj5);
       }
       
       private static void IsEqualTo(Type t, Object inst)
       {
          Type t2 = inst as Type;
          if (t2 != null)
             Console.WriteLine("{0} = {1}: {2}", t.Name, t2.Name,
                               t.Equals(t2));
          else
             Console.WriteLine("Cannot cast the argument to a type.");
    
          Console.WriteLine();                        
       }
    }
    // The example displays the following output:
    //       Int32 = Int32: True
    //       
    //       Int32 = String: False
    //       
    //       Object = Object: True
    //       
    //       List`1 = List`1: False
    //       
    //       Cannot cast the argument to a type.
    
    Imports System.Collections.Generic
    Imports System.Reflection
    
    Module Example
       Public Sub Main()
          Dim t As Type = GetType(Integer)
          Dim obj1 As Object = GetType(Integer).GetTypeInfo()
          IsEqualTo(t, obj1)
    
          Dim obj2 As Object = GetType(String)
          IsEqualTo(t, obj2)
          
          t = GetType(Object)
          Dim obj3 As Object = GetType(Object)
          IsEqualTo(t, obj3)
          
          t = GetType(List(Of ))
          Dim obj4 As Object = (New List(Of String())).GetType()
          IsEqualTo(t, obj4)
          
          t = GetType(Type)
          Dim obj5 As Object = Nothing
          IsEqualTo(t, obj5)
       End Sub
       
       Private Sub IsEqualTo(t As Type, inst As Object)
          Dim t2 As Type = TryCast(inst, Type)
          If t2 IsNot Nothing Then
             Console.WriteLine("{0} = {1}: {2}", t.Name, t2.Name,
                               t.Equals(t2))
          Else
             Console.WriteLine("Cannot cast the argument to a type.")
          End If
          Console.WriteLine()                        
       End Sub
    End Module
    ' The example displays the following output:
    '       Int32 = Int32: True
    '       
    '       Int32 = String: False
    '       
    '       Object = Object: True
    '       
    '       List`1 = List`1: False
    '       
    '       Cannot cast the argument to a type.
    

    關於此範例,有兩件事特別值得注意:Two things are particularly worth noting about the example:

    • 比較表示整數的 Type 物件,而此 TypeInfo 物件代表整數傳回 true,因為 TypeInfo 衍生自 TypeThe comparison of a Type object that represents an integer with a TypeInfo object that represents an integer return true because TypeInfo is derived from Type.

    • 使用 List(Of String) 物件(封閉式泛型型別)來表示 IList<T> 物件(開放式泛型型別)的 Type 物件比較會傳回 falseThe comparison of a Type object that represents a IList<T> object (an open generic type) with a List(Of String) object (a closed generic type) returns false.

    Remarks

    這個方法會覆寫 Object.EqualsThis method overrides Object.Equals. 它會將 o 轉換成 Type 類型的物件,並呼叫 Type.Equals(Type) 方法。It casts o to an object of type Type and calls the Type.Equals(Type) method.

    See also

    Applies to