Type.Equals Method 
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Overloads
| Equals(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) | 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)
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
public:
 bool Equals(Type ^ o);public:
 virtual bool Equals(Type ^ o);public bool Equals(Type o);public virtual bool Equals(Type? o);public virtual bool Equals(Type o);override this.Equals : Type -> boolPublic Function Equals (o As Type) As BooleanPublic Overridable Function Equals (o As Type) As BooleanParameters
- o
- Type
The object whose underlying system type is to be compared with the underlying system type of the current Type.
Returns
true if the underlying system type of o is the same as the underlying system type of the current Type; otherwise, false.
Implements
Examples
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
*/
open System
type Example() = class end
do
    let a = typeof<string>
    let b = typeof<int>
    printfn $"{a} == {b}: {a.Equals b}"
    // The Type objects in a and b are not equal,
    // because they represent different types.
    let a = typeof<Example>
    let b = Example().GetType()
    printfn $"{a} is equal to {b}: {a.Equals b}"
    // The Type objects in a and b are equal,
    // because they both represent type Example.
    let b = typeof<Type>
    printfn $"typeof({a}).Equals(typeof({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.
(* 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
Applies to
Equals(Object)
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
public:
 override bool Equals(System::Object ^ o);public override bool Equals(object o);public override bool Equals(object? o);override this.Equals : obj -> boolPublic Overrides Function Equals (o As Object) As BooleanParameters
- o
- Object
The object whose underlying system type is to be compared with the underlying system type of the current Type. For the comparison to succeed, o must be able to be cast or converted to an object of type   Type.
Returns
true if the underlying system type of o is the same as the underlying system type of the current Type; otherwise, false. This method also returns false if:
- ois- null.
- ocannot be cast or converted to a Type object.
Implements
Examples
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.
open System
open System.Reflection
let isEqualTo (t: Type) (inst: obj) =
    match inst with
    | :? Type as t2 ->
        printfn $"{t.Name} = {t2.Name}: {t.Equals t2}\n"
    | _ ->
        printfn "Cannot cast the argument to a type.\n"
do 
    let t = typeof<int>
    typeof<int>.GetTypeInfo()
    |> isEqualTo t
    typeof<String>
    |> isEqualTo t
    let t = typeof<obj>
    typeof<obj>
    |> isEqualTo t
    let t = typeof<ResizeArray<_>>.GetGenericTypeDefinition()
    let obj4: obj = (ResizeArray<String>()).GetType()
    isEqualTo t obj4
    let t = typeof<Type>
    let obj5: obj = null
    isEqualTo t obj5
// 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:
- The comparison of a Type object that represents an integer with a TypeInfo object that represents an integer return - truebecause TypeInfo is derived from Type.
- The 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
This method overrides Object.Equals. It casts o to an object of type Type and calls the Type.Equals(Type) method.