2009-12-17 3 views
2

Comment puis-je détecter si une valeur MemberExpression a besoin d'être compilée/évaluée?Détection d'une valeur MemberExpression

J'ai deux sorties d'expression de membre séparées, la première qui a une valeur et la seconde qui ne le fait pas. Quelle est la meilleure façon de différencier les deux?

exp 
**{value(Microsoft.Connect.Api.Client.Tests.SearchQueryUnitTests+<>c__DisplayClass6).handle}** 
    [System.Linq.Expressions.MemberExpression]: **{value(Microsoft.Connect.Api.Client.Tests.SearchQueryUnitTests+<>c__DisplayClass6).handle}** 
    NodeType: MemberAccess 
    Type: {Name = "String" FullName = "System.String"} 

vs

exp 
{x.CreatedBy} 
    [System.Linq.Expressions.MemberExpression]: {x.CreatedBy} 
    NodeType: MemberAccess 
    Type: {Name = "String" FullName = "System.String"} 

Répondre

1

Je vois deux réponses différentes à ce sujet.

Etes-vous en train d'essayer de créer un conditionnel avec des expressions et de faire quelque chose avec le résultat? Si c'est le cas, vous allez créer une expression binaire de type Equals (appelez la méthode statique Equals sur la classe Expression) en passant dans MemberExpression comme à gauche, puis en passant une autre expression représentant une non-valeur (null si un type de référence, une nouvelle instance de la structure si un type de valeur).

Si vous essayez réellement d'évaluer l'expression à ce moment-là, alors je créerais un lambda qui retournerait réellement l'expression, la compilerait, et vérifierait ensuite avec une non-valeur dans votre code.