2012-02-17 2 views
0

나는 다음과 같은 코드가 있습니다Linq Expression Tree 다형성이 올바르게 작동하는 이유는 무엇입니까?

if(expression.GetType() == typeof(BinaryExpression)) 
{ 
//DO something 
} 

식 (A Console.WriteLines(expression.GetType().ToString() 이렇게 말한다 일)을 MethodBinaryExpression이다. 그러나 코드는 if 블록으로 절대 들어 가지 않습니다. MethodBinaryExpression은 자식 클래스 인 SimpleBinaryExpression이고 자식 클래스는 BinaryExpression입니다. 뭐라 구요?

답변

2
이에 테스트를 변경

:

if(expression is BinaryExpression) 
{ 
//DO something 
} 

을 MethodBinaryExpression이 BinaryExpression을 상속하더라도, 그들은 여전히 ​​서로 다른 유형입니다. Type 객체를 비교하는 방법을 몇 가지 예제를 통해 시험해 볼 수 있습니다.

// Prints "False" 
Console.WriteLine(typeof(MethodBinaryExpression) == typeof(BinaryExpression)); 

// Prints "True" 
Console.WriteLine(typeof(BinaryExpression) == typeof(BinaryExpression)); 
+0

감사합니다. C#의 ==가 전체 상속 트리를 계속 탐색하는 이유를 알 수 없습니다. 그것은 완벽하게 작동했습니다. – TheNerd

관련 문제