빠른 질문 : C #의 다른 유형과 유형 유형을 비교하는 방법은 무엇입니까? 내 말은, 나는를했습니다 Type typeField
하고 있는지 내가 알고 싶은 System.String
, System.DateTime
등,하지만 typeField.Equals(System.String)
작동하지 않습니다.
실마리?
답변
다음을 시도하십시오
typeField == typeof(string)
typeField == typeof(DateTime)
typeof
C # 의 연산자 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