2012-02-17 3 views
0

У меня есть код, как это:Почему полиморфизм дерева выражений Linq корректно работает?

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

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

ответ

2

Измените тест на это:

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

Даже если MethodBinaryExpression наследует от BinaryExpression, они по-прежнему разные типы. Вы можете попробовать несколько примеров, чтобы увидеть, как сравнить объекты типа:

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

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

Спасибо - я не знаю, почему я продолжаю думать, что C# == будет пересекать все дерево наследования. Это сработало отлично. – TheNerd

Смежные вопросы