2012-02-17 41 views
0

我有這樣的代碼:爲什麼Linq Expression Tree多態性能夠正確工作?

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

表達是MethodBinaryExpression(做一個Console.WriteLines(expression.GetType().ToString()是這麼說的)。但是,代碼永遠不會進入if塊。 MethodBinaryExpressionSimpleBinaryExpression的子類,它是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 2012-02-17 00:17:24