2012-02-11 12 views
12

Sto cercando di analizzare Expression e ad un certo punto devo analizzare le espressioni con il tipo System.Linq.Expressions.LogicalBinaryExpression. Questo nome di classe che prendo da orologio di debug. expression.GetType().ToString() uguale a "System.Linq.Expressions.LogicalBinaryExpression". Ma non posso vedere questa classe nel namespace System.Linq.Expressions. Da nessuna parte. La stessa cosa con la classe MethodBinaryExpression.Cosa c'è di sbagliato nella classe System.Linq.Expressions.LogicalBinaryExpression?

Al fine di verificare il tipo davvero preferiscono scrivere

  • expression is LogicalBinaryExpression o
  • expression.GetType() = typeof(LogicalBinaryExpression) ma sicuramente non
  • expression.GetType().ToString() == "System.Linq.Expressions.LogicalBinaryExpression"

Così ora non mi resta che errore

Il tipo o dello spazio dei nomi il nome 'LogicalBinaryExpression' non esiste nello spazio dei nomi 'System.Linq.Expressions' (Vi manca un riferimento all'assembly?)

Come possibile?

risposta

13

LogicalBinaryExpression è internal, quindi:

  1. E 'più difficile da ottenere è come Type, non si può semplicemente utilizzare typeof(LogicalBinaryExpression) o x is LogicalBinaryExpression.
  2. Non troverete alcuna documentazione a riguardo.
  3. Non dovresti usarlo affatto. È un dettaglio di implementazione che può cambiare in qualsiasi momento.

È necessario controllare BinaryExpression oppure controllare l'espressione NodeType.

Lo stesso vale per MethodBinaryExpression.

Problemi correlati