Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se tratan los siguientes errores del compilador:
- CS0765 - En los árboles de expresión no se pueden usar métodos parciales con solo una declaración de definición ni métodos condicionales quitados.
- CS0831 - Un árbol de expresión no puede contener un acceso base.
- CS0832 - Un árbol de expresión no puede contener un operador de asignación
- CS0834 - Una expresión lambda con un cuerpo de instrucción no se puede convertir en un árbol de expresión.
- CS0835 - No se puede convertir una expresión lambda a un árbol de expresión cuyo argumento de tipo 'tipo' no sea un tipo delegado.
- CS0838 - Un árbol de expresión no puede contener un inicializador de matriz multidimensional.
- CS0845 - Una lambda de árbol de expresiones no puede contener un operador de coalescencia con un literal nulo o predeterminado en el lado izquierdo.
- CS0853 - Un árbol de expresión no puede contener una especificación de argumento con nombre.
- CS0854 - Un árbol de (la) expresión no puede contener una llamada o invocación que use argumentos opcionales.
- CS0855 - Un árbol de expresión no puede contener una propiedad indizada.
- CS1944 - Un árbol de expresión no puede contener una operación de puntero no segura.
- CS1945 - Un árbol de expresión no puede contener una expresión de método anónimo.
- CS1946 - Una expresión de método anónimo no se puede convertir en un árbol de expresión.
-
CS1951 - Una expresión lambda de árboles de expresión no puede contener un parámetro
ref,inoout. - CS1952 - Una expresión lambda de árboles de expresión no puede contener un método con argumentos variables.
- CS1963 - Un árbol de expresión no puede contener una operación dinámica.
- CS1989 - Las expresiones lambda asincrónicas no se pueden convertir en árboles de expresión.
- CS2037 - Una expresión lambda de árbol de expresión no puede contener una llamada COM con 'ref' omitido en los argumentos.
- CS7053 - Un árbol de expresiones no puede contener "feature".
- CS8072 - Una expresión lambda de árbol de expresión no puede contener un operador de propagación null.
- CS8074 - Una expresión lambda de árbol de expresión no puede contener un inicializador de diccionarios.
-
CS8075 - No se admite un método
Addde extensión para un inicializador de colección en una expresión lambda. - CS8110 - Un árbol de expresión no puede contener una referencia a una función local.
-
CS8122 - Un árbol de expresión no puede contener un operador de coincidencia de patrones "
is". - CS8143 - Un árbol de expresión no puede contener un literal de tupla.
- CS8144 - Un árbol de expresión no puede contener una conversión de tupla.
- CS8153 - Un lambda de árbol de expresión no puede contener una llamada a un método, una propiedad o un indexador que devuelva datos por referencia.
- CS8155 - Las expresiones lambda que devuelven datos por referencia no se pueden convertir en árboles de expresión.
- CS8188 - Un árbol de expresión no puede contener una expresión throw.
- CS8198 - Un árbol de expresión no puede contener una declaración de variable de argumento out.
- CS8207 - Un árbol de expresiones no puede contener un discard.
-
CS8382 - Un árbol de expresión no puede contener un operador de tupla
==o!=. - CS8514 - Un árbol de expresión no puede contener una expresión switch.
- CS8640 - Un árbol de expresión no puede contener un valor de estructura ref ni el tipo restringido.
- CS8642 - Un árbol de expresión no puede contener una asignación de fusión nula.
- CS8790 - Un árbol de expresiones no puede contener un patrón de acceso al indexador System.Index o System.Range.
-
CS8791 - Un árbol de expresión no puede contener una expresión de índice del otro extremo ("
^"). -
CS8792 - Un árbol de expresión no puede contener una expresión de intervalo ("
.."). -
CS8810 - "
&" en grupos de métodos no se puede usar en árboles de expresión. -
CS8849 - Un árbol de expresión no puede contener una
with-expresión. - CS8927 - Un árbol de expresiones no puede contener un acceso a un miembro de interfaz virtual estática o abstracta.
- CS8952 - Un árbol de expresión no puede contener un manejador de conversión de cadena interpolada.
- CS8972 - Una expresión lambda con atributos no se puede convertir en un árbol de expresión.
- CS9170 - Un árbol de expresión no puede contener un acceso a un array en línea ni una conversión.
- CS9175 - Un árbol de expresiones no puede contener una expresión de colección.
- CS9226 - Un árbol de expresiones no puede contener una forma expandida de parámetros de colección de parámetros que no sean de matriz.
- CS9296 - Es posible que un árbol de expresiones no contenga acceso a una propiedad de extensión.
- CS9307 - Es posible que un árbol de expresiones no contenga una especificación de argumento con nombre fuera de posición.
- CS9369 - Es posible que un árbol de expresión no contenga una conversión de unión.
Restricciones de árbol de expresión
Todos los errores de la lista anterior indican que ha usado un tipo de expresión de C# que no está permitido en un árbol de expresión. En la mayoría de los casos, las expresiones prohibidas representan la sintaxis introducida después de C# 3.0. Estas expresiones están prohibidas porque permitir su uso crearía un cambio importante en todas las bibliotecas que analizan los árboles de expresión. Todas las bibliotecas tendrían que mejorarse para analizar las nuevas expresiones de C# si se permitieran nuevas construcciones.
Se prohíben las expresiones siguientes:
- Invocaciones de métodos parciales que no tienen una declaración de implementación.
- Invocaciones de métodos condicionales que se han removido.
- Invocaciones de funciones locales.
- No se permiten expresiones lambda
async. - Uso del acceso
basepara llamar directamente a un método virtual declarado en una clase base. - operaciones de asignación.
- no se permiten lambdas de declaración.
- inicializadores de matriz multidimensional. En su lugar, debe crear e inicializar una matriz multidimensional fuera del árbol de expresiones.
-
dynamicNo se permiten las operaciones. - No se permiten expresiones de coincidencia de patrones.
- Los literales de tupla y muchas operaciones con tuplas, como las comparaciones de igualdad, no están permitidos.
- No se permiten expresiones
throw. -
declaraciones de descarte (
_). - No se permiten los operadores de índice e intervalo.
- No se permite la mutación no destructiva mediante expresiones
with. - No puede declarar ni acceder a arrays en línea.
- No se pueden incluir expresiones de colección.
- No se permiten conversiones de unión.
- No se permiten los operadores de propagación null y de fusión null.
- Tipos de
ref struct, como System.Span<T> y System.ReadOnlySpan<T> no se permiten. - No se permiten los parámetros
in,outyref, incluidas las declaraciones de variablesout. - No se permiten las devoluciones
ref. - No se permiten llamadas a métodos devueltos por
ref. - No se puede acceder a los miembros de la interfaz abstracta estática.
- Matrices en línea.
- El modificador
paramssolo se permite en matrices unidimensionales. No se permiten otros tipos de colección.
Otras restricciones son:
- No se puede acceder a las propiedades de extensión como extensiones.
- Los atributos no se pueden aplicar a la expresión lambda, sus parámetros ni devoluciones.
- La expresión lambda debe convertirse en un tipo derivado de System.Linq.Expressions.Expression cuyo parámetro de tipo es un tipo delegado.
- Los parámetros con nombre y opcionales están restringidos. La expresión no puede llamar a un método que especifique argumentos con nombre y no puede usar el valor predeterminado de un parámetro opcional.
- No se permiten inicializadores de diccionario. Ninguno de ellos son métodos
Addde extensión. - La expresión de destino debe ser una expresión lambda. No se permiten constantes y variables, pero sí se permite una expresión lambda que devuelve una constante o variable.
- No se permiten operaciones de puntero no seguras.
- Las llamadas COM deben incluir
refen argumentos; no pueden ser implícitas. - No se permite la palabra clave no admitida
__arglist.