为什么Linq表达式树多态性正常工作?

时间:2012-02-17 00:02:22

标签: .net expression-trees

我有这样的代码:

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

表达式是一个MethodBinaryExpression(执行Console.WriteLines(expression.GetType().ToString()表示如此)。但是,代码永远不会进入if-block。 MethodBinaryExpressionSimpleBinaryExpression的子类,它是BinaryExpression的子类。是什么给了什么?

1 个答案:

答案 0 :(得分: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));