[C#] 유형을 비교하는 방법

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

실마리?



답변

다음을 시도하십시오

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

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

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


답변

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

if (myObject is string)
{
  DoSomething()
}


답변

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

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
}


답변

인스턴스가 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한 번만 지정된 유형으로 변환 할 수 있다는 이점이 있습니다 .


답변

http://msdn.microsoft.com/en-us/library/system.type.gettype.aspx

Console.WriteLine("typeField is a {0}", typeField.GetType());

그것은 당신에게 뭔가를 줄 것입니다

typeField is a String

typeField is a DateTime

또는

http://msdn.microsoft.com/en-us/library/58918ffs(v=vs.71).aspx


답변