2012-02-11 14 views
12

Estoy tratando de analizar Expression y en algún momento tengo que analizar expresiones con el tipo System.Linq.Expressions.LogicalBinaryExpression. Este nombre de clase lo tomo de depurar reloj. expression.GetType().ToString() es igual a "System.Linq.Expressions.LogicalBinaryExpression". Pero no puedo ver esta clase en el espacio de nombre System.Linq.Expressions. Nada en absoluto. Lo mismo con la clase MethodBinaryExpression.¿Qué pasa con la clase System.Linq.Expressions.LogicalBinaryExpression?

Con el fin de verificar el tipo que realmente prefiera escribir

  • expression is LogicalBinaryExpression o
  • expression.GetType() = typeof(LogicalBinaryExpression) pero definitivamente no es
  • expression.GetType().ToString() == "System.Linq.Expressions.LogicalBinaryExpression"

Así que ahora sólo tengo error

El tipo o espacio de nombres 'LogicalBinaryExpression' no existe en el espacio de nombres '' System.Linq.Expressions (¿falta una referencia de ensamblado?)

Cómo esto posible?

Respuesta

13

LogicalBinaryExpression es internal, por lo que:

  1. Es más difícil de conseguir es como Type, no se puede simplemente usar typeof(LogicalBinaryExpression) o x is LogicalBinaryExpression.
  2. No encontrará ninguna documentación al respecto.
  3. No debe usarlo en absoluto. Es un detalle de implementación que puede cambiar en cualquier momento.

Debe marcar BinaryExpression, o marcar el NodeType de la expresión.

Lo mismo se aplica al MethodBinaryExpression.