유형을 비교하는 방법


130

빠른 질문 : C #의 다른 유형과 유형 유형을 비교하는 방법은 무엇입니까? 내 말은, 나는를했습니다 Type typeField하고 있는지 내가 알고 싶은 System.String, System.DateTime등,하지만 typeField.Equals(System.String)작동하지 않습니다.

실마리?

답변:


179

다음을 시도하십시오

typeField == typeof(string)
typeField == typeof(DateTime)

typeofC # 의 연산자 Type는 명명 된 형식 의 개체를 제공합니다 . Type인스턴스는 ==연산자 와 비교할 수 있으므로이를 비교하는 좋은 방법입니다.

참고 : 올바르게 기억한다면 관련 유형이 NoPIA를 통해 어셈블리에 포함 된 COM 인터페이스 일 때이 문제가 발생하는 경우가 있습니다. 이 경우처럼 들리지 않습니다.


74

is 연산자로 사용할 수 있습니다 . 그런 다음 다음을 작성하여 객체가 특정 유형인지 확인할 수 있습니다.

if (myObject is string)
{
  DoSomething()
}

3
"is"또는 "typeof"가 더 낫습니까?
Brent Wagoner

32

다음을 사용하여 정확히 동일한 유형을 비교할 수 있습니다.

class A {
}
var a = new A();
var typeOfa = a.GetType();
if (typeOfa == typeof(A)) {
}

typeof는 주어진 클래스에서 Type 객체를 반환합니다.

그러나 A에서 상속받은 B 유형이 있으면이 비교는 거짓입니다. 그리고 당신은 IsAssignableFrom을 찾고 있습니다.

class B : A {
}
var b = new B();
var typeOfb = b.GetType();

if (typeOfb == typeof(A)) { // false
}

if (typeof(A).IsAssignableFrom(typeOfb)) { // true
}

7

인스턴스가 Type:

Type typeFiled;
if (typeField == typeof(string))
{ 
    ... 
}

그러나 인스턴스가 object아닌 연산자를 Type사용하는 경우 as:

object value;
string text = value as string;
if (text != null)
{
    // value is a string and you can do your work here
}

value한 번만 지정된 유형으로 변환 할 수 있다는 이점이 있습니다 .


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.