Quel est le problème avec la classe System.Linq.Expressions.LogicalBinaryExpression?

.net expression-trees

Question

J'essaie d'analyser Expression et, à un moment donné, je dois analyser des expressions de type System.Linq.Expressions.LogicalBinaryExpression . Ce nom de classe je tire de la montre de débogage. expression.GetType().ToString() est égal à "System.Linq.Expressions.LogicalBinaryExpression" . Mais je ne peux pas voir cette classe dans l'espace de noms System.Linq.Expressions . Nulle part du tout. La même chose avec la classe MethodBinaryExpression .

Afin de vérifier le type, je préfère vraiment écrire

  • expression is LogicalBinaryExpression ou
  • expression.GetType() = typeof(LogicalBinaryExpression ) mais certainement pas
  • expression.GetType().ToString() == "System.Linq.Expressions.LogicalBinaryExpression"

Alors maintenant, j'ai juste une erreur

Le type ou nom de l'espace de noms 'LogicalBinaryExpression' n'existe pas dans l'espace de noms 'System.Linq.Expressions' (il manque une référence d'assembly?)

Comment cela est-il possible?

Réponse acceptée

LogicalBinaryExpression est internal , donc:

  1. Il est plus difficile d'obtenir en tant que Type , vous ne pouvez pas simplement utiliser typeof(LogicalBinaryExpression) ou x is LogicalBinaryExpression .
  2. Vous ne trouverez aucune documentation à ce sujet.
  3. Vous ne devriez pas l'utiliser du tout. C'est un détail d'implémentation qui peut changer à tout moment.

Vous devriez soit rechercher BinaryExpression , soit vérifier le NodeType de l'expression.

La même chose s'applique à MethodBinaryExpression .




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi