Почему полиморфизм дерева выражений Linq работает правильно? - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть такой код:

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

выражение - это выражение MethodBinaryExpression (выполнение команды Console.WriteLines(expression.GetType().ToString() говорит так). Однако код никогда не попадает в блок if. MethodBinaryExpression - это дочерний класс SimpleBinaryExpression, который является дочерним классом BinaryExpression. Что дает?

1 Ответ

2 голосов
/ 17 февраля 2012

Измените тест следующим образом:

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)); 
...