C#의 Type.Equals() 메서드는 현재 Type 객체의 기본 시스템 타입이 지정된 Object 또는 다른 Type의 기본 시스템 타입과 동일한지 여부를 판별하는 데 사용됩니다. 즉, 두 타입이 실제로 같은 런타임 타입을 나타내는지 비교할 때 유용합니다.
문법(Syntax)
public virtual bool Equals(Type o); public override bool Equals(object o);
위 문법에서 매개변수 o는 현재 Type의 기본 시스템 타입과 비교할 대상 객체입니다.
예제 1: 서로 다른 타입 비교
먼저 두 개의 서로 다른 타입을 비교하는 간단한 예제를 살펴보겠습니다.
using System;
public class Demo {
public static void Main(string[] args) {
Type val1 = typeof(System.UInt16);
Type val2 = typeof(System.Int32);
Console.WriteLine("두 타입이 동일합니까? " + val1.Equals(val2));
}
}
출력 결과
두 타입이 동일합니까? False
UInt16과 Int32는 서로 다른 시스템 타입이므로 Equals() 메서드는 False를 반환합니다.
예제 2: 리플렉션을 활용한 타입 비교
이번에는 System.Reflection 네임스페이스의 GetTypeInfo() 메서드를 사용하여 같은 타입을 비교하는 예제를 살펴보겠습니다.
using System;
using System.Reflection;
public class Demo {
public static void Main(string[] args) {
Type type = typeof(String);
Object obj = typeof(String).GetTypeInfo();
Type type2 = obj as Type;
if (type2 != null)
Console.WriteLine("두 타입이 동일합니까? " + type.Equals(type2));
else
Console.WriteLine("캐스팅할 수 없습니다!");
}
}
출력 결과
두 타입이 동일합니까? True
typeof(String)으로 얻은 타입과 리플렉션을 통해 변환한 타입은 본질적으로 동일한 시스템 타입을 나타내므로 True가 반환됩니다.
정리
Type.Equals()메서드는 두 타입의 기본 시스템 타입이 같은지 비교합니다.- 타입이 다르면
false, 동일하면true를 반환합니다. - 리플렉션으로 얻은
Type객체와 직접 비교할 수 있어 런타임 타입 검증에 유용합니다.