Поделиться через


Устранение ошибок и предупреждений, созданных из выражений, запрещенных в деревах выражений

В этой статье рассматриваются следующие ошибки компилятора:

  • Частичные методы CS0765 - с определением объявления или удаления условных методов нельзя использовать в деревах выражений.
  • CS0831 - Дерево выражений может не содержать базовый доступ.
  • CS0832 - Дерево выражений может не содержать оператора назначения
  • CS0834 - Выражение лямбда-выражения с текстом инструкции нельзя преобразовать в дерево выражений.
  • CS0835 - Не удается преобразовать лямбда-код в дерево выражений, аргумент типа которого "type" не является типом делегата.
  • Дерево выражений CS0838 - может не содержать инициализатор многомерного массива.
  • CS0845 - Лямбда-дерево выражений может не содержать оператора объединения со значением NULL или литералом по умолчанию слева.
  • CS0853 - Дерево выражений может не содержать спецификацию именованного аргумента.
  • Cs0854 - Дерево выражений может не содержать вызов или вызов, использующий необязательные аргументы.
  • Дерево выражений CS0855 - Может не содержать индексированного свойства.
  • CS1944 - Дерево выражений может не содержать небезопасную операцию указателя.
  • Дерево выражений CS1945 - может не содержать анонимное выражение метода.
  • CS1946 - Не удается преобразовать анонимное выражение метода в дерево выражений.
  • CS1951 - Лямбда дерева выражений refinможет не содержать лямбда-файл или out параметр.
  • CS1952 - Лямбда-дерево выражений может не содержать метод с аргументами переменной.
  • Cs1963 - Дерево выражений может не содержать динамической операции.
  • Выражения Async лямбда-выражений CS1989 - нельзя преобразовать в деревья выражений.
  • CS2037 - Лямбда-дерево выражений может не содержать вызов COM с ссылкой, опущенной по аргументам.
  • CS7053 - Дерево выражений может не содержать "feature".
  • CS8072 - Лямбда-дерево выражений может не содержать оператора распространения null.
  • CS8074 - Лямбда-дерево выражений может не содержать инициализатор словаря.
  • Метод расширения CS8075 - AddНе поддерживается для инициализатора коллекции в лямбда-выражении.
  • Дерево выражений CS8110 - может не содержать ссылку на локальную функцию.
  • Cs8122 - Дерево выражений может не содержатьis оператора сопоставления шаблонов.
  • CS8143 - Дерево выражений может не содержать литерал кортежа.
  • Cs8144 - Дерево выражений может не содержать преобразования кортежей.
  • CS8153 - Лямбда-дерево выражений может не содержать вызов метода, свойства или индексатора, возвращаемого по ссылке.
  • Лямбда-выражения CS8155 - , возвращаемые по ссылке, нельзя преобразовать в деревья выражений.
  • Дерево выражений CS8188 - может не содержать выражения броска.
  • Дерево выражений CS8198 - может не содержать объявление переменной аргументов вне.
  • Дерево выражений CS8207 - может не содержать отмены.
  • CS8382 - Дерево выражений может не содержать кортеж == или != оператор.
  • Cs8514 - Дерево выражений может не содержать выражение switch.
  • Дерево выражений CS8640 - не может содержать значение структуры ref или ограниченного типа.
  • Cs8642 - Дерево выражений может не содержать назначения объединения null.
  • Дерево выражений CS8790 - может не содержать доступ к шаблону System.Index или System.Range индексатору.
  • CS8791 - Дерево выражений не может содержать выражение из конечного индекса ('^).
  • CS8792 - Дерево выражений не может содержать выражение диапазона ('..).
  • CS8810 - '&' в группах методов нельзя использовать в деревах выражений.
  • Дерево выражений CS8849 - withможет не содержать выражение -.
  • Cs8927 - Дерево выражений может не содержать доступ к статическому виртуальному или абстрактного члену интерфейса.
  • Дерево выражений CS8952 - может не содержать преобразования интерполированного обработчика строк.
  • ВЫРАЖЕНИЕ CS8972 - лямбда-выражение с атрибутами нельзя преобразовать в дерево выражений.
  • Дерево выражений CS9170 - может не содержать встроенный доступ к массиву или преобразование.
  • Дерево выражений CS9175 - может не содержать выражение коллекции.
  • Дерево выражений CS9226 - может не содержать развернутую форму параметра коллекции params, отличного от массива.
  • CS9296 - Дерево выражений не может содержать доступ к свойству расширения.
  • CS9307 - Дерево выражений не может содержать спецификацию именованного аргумента вне позиции.

Ограничения дерева выражений

Все ошибки в предыдущем списке указывают, что вы использовали тип выражения C#, который не разрешен в дереве выражений. В большинстве случаев запрещенные выражения представляют синтаксис, представленный после C# 3.0. Эти выражения запрещены, так как позволяет им создавать критические изменения во всех библиотеках, которые анализируют деревья выражений. Все библиотеки должны быть улучшены для синтаксического анализа новых выражений C#, если были разрешены новые конструкции.

Запрещены следующие выражения:

Другие ограничения:

  • Свойства расширений не могут быть доступны через расширения.
  • Атрибуты нельзя применять к лямбда-выражению, его параметрам или возвращаемым.
  • Лямбда-выражение должно быть преобразовано в тип, производный от System.Linq.Expressions.Expression параметра типа делегата.
  • именованные и необязательные параметры ограничены. Выражение не может вызвать метод, указывающий именованные аргументы, и он не может использовать значение по умолчанию необязательного параметра.
  • Инициализаторы словаря не допускаются. Ни методы расширения Add .
  • Целевое выражение должно быть лямбда-выражением. Константы и переменные не допускаются, но лямбда-выражение, возвращающее константу или переменную, является.
  • Небезопасные операции указателя не допускаются.
  • Вызовы COM должны включаться ref в аргументы; он не может быть подразумеваемым.
  • Неподдерживаемое __arglist ключевое слово запрещено.