# Type.Equals 方法

## 多載

 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)

``````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 -> bool``
``Public Function Equals (o As Type) As Boolean``
``Public Overridable Function Equals (o As Type) As Boolean``

o
Type

Boolean

### 範例

``````
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.

}
}

//
/* 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.

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
'
``````

## Equals(Object)

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

o
Object

#### 傳回

Boolean

• `o``null`
• `o` is `null`.

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

### 範例

下列範例會使用 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.

• Type物件的比較，該物件代表 IList<T> (開放式泛型型別) 具有 `List(Of String)` 封閉式泛型型別) 傳回的 (物件 `false`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`.

### 備註

這個方法會覆寫 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.