Что не так с классом System.Linq.Expressions.LogicalBinaryExpression? - PullRequest
13 голосов
/ 11 февраля 2012

Я пытаюсь проанализировать Expression, и в какой-то момент мне нужно проанализировать выражения с типом System.Linq.Expressions.LogicalBinaryExpression. Это название класса я беру из отладочных часов. expression.GetType().ToString() равно "System.Linq.Expressions.LogicalBinaryExpression". Но я не могу видеть этот класс в System.Linq.Expressions пространстве имен. Вообще никуда То же самое с MethodBinaryExpression классом.

Для проверки типа я действительно предпочитаю написать

  • expression is LogicalBinaryExpression или
  • expression.GetType() = typeof(LogicalBinaryExpression ) но определенно нет
  • expression.GetType().ToString() == "System.Linq.Expressions.LogicalBinaryExpression"

Так что теперь у меня просто ошибка

Тип или имя пространства имен «LogicalBinaryExpression» не существует в пространстве имен «System.Linq.Expressions» (отсутствует ссылка на сборку?)

Как это возможно?

1 Ответ

16 голосов
/ 11 февраля 2012

LogicalBinaryExpression равно internal, поэтому:

  1. Сложнее получить как Type, вы не можете просто использовать typeof(LogicalBinaryExpression) или x is LogicalBinaryExpression.
  2. Вы не найдете никакой документации об этом.
  3. Вам вообще не следует его использовать.Это деталь реализации, которая может измениться в любое время.

Вы должны либо проверить BinaryExpression, либо проверить NodeType выражения.

То же самое относится к MethodBinaryExpression.

...