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:
- CS0022: Número incorrecto de índices dentro de [], se esperaba "número".
-
CS0178: Especificador de rango no válido: se esperaba ”
,” o ”]”. - CS0248: No se puede crear una matriz con un tamaño negativo
-
CS0270: El tamaño de la matriz no se puede especificar en una declaración de variable (intente inicializar con una expresión ”
new”). - CS0611: Los elementos de matriz no pueden ser del tipo.
- CS0623: Los inicializadores de matriz solo se pueden utilizar en un inicializador de campo o variable. Pruebe a utilizar una expresión new en su lugar.
- CS0650: Declarador de matriz erróneo. Para declarar una matriz administrada, el especificador de rango precede al identificador de la variable. Para declarar un campo de búfer de tamaño fijo, utilice la palabra clave fija antes del tipo de campo.
- CS0719: Los elementos de matriz no pueden ser de tipo estático.
- CS0747: Declarador de miembro de inicializador no válido.
- CS0820: No se puede asignar un inicializador de matriz a una variable local con tipo implícito.
- CS0826: No se encontró el mejor tipo para la matriz con tipo implícito.
- CS0846: Se espera un inicializador de matriz anidada.
- CS1063: El mejor método Add sobrecargado del elemento inicializador de la colección está obsoleto.
-
CS1552: El especificador de tipo de matriz,
[], debe aparecer antes del nombre del parámetro. - CS1586: La creación de matriz debe disponer de un tamaño de matriz o un inicializador de matriz.
- CS1920: El inicializador de elemento no puede estar vacío.
-
CS1921: La mejor coincidencia de método sobrecargado tiene una firma errónea para el elemento inicializador. El elemento
Addinicializable debe ser un método de instancia accesible. - CS1925: No se puede inicializar el objeto de tipo "tipo" con un inicializador de colección..
- CS1950: El mejor método Add sobrecargado del inicializador de colección tiene algunos argumentos no válidos.
-
CS1954La mejor correspondencia del método sobrecargado para el elemento inicializador de la colección no se puede usar. Los métodos "
Add" del inicializador de la colección no pueden tener parámetrosrefoout. - CS9174No se puede inicializar el tipo con un literal de colección porque el tipo no se puede construir.
- CS9176No hay ningún tipo de destino para el literal de colección.
- CS9185: El tipo de generador CollectionBuilderAttribute debe ser una clase o estructura no genérica.
- CS9186: El nombre del método CollectionBuilderAttribute no es válido.
-
CS9187: No se pudo encontrar un método accesible con la firma esperada: un método estático con un único parámetro de tipo
ReadOnlySpan<T>; y el tipo de valor devuelto correcto. - CS9188: El tipo tiene un collectionBuilderAttribute, pero ningún tipo de elemento.
- CS9203: No se puede usar una expresión de colección de este tipo en este contexto porque puede exponerse fuera del ámbito actual.
- CS9210: Esta versión de System.Collections.Immutable.ImmutableArray<T>no se puede usar con expresiones de colección.
-
CS9212: el operador spread '
..' no puede operar en variables de tipo 'type' porque 'type' no contiene una instancia pública ni una definición de extensión para 'member'. - CS9213: El objetivo de la expresión de colección 'type' no tiene un tipo de elemento.
- CS9214: el tipo de expresión de colección debe tener un constructor aplicable al que se pueda llamar sin argumentos.
- CS9215: el tipo de expresión de colección 'type' debe tener una instancia o un método de extensión 'Add' al que se puede llamar con un único argumento.
- CS9222: el inicializador de colección da como resultado una cadena infinita de instancias de la colección 'type'.
- CS9332: No se puede usar el operador de propagación '..' en la expresión de filtro de una cláusula catch.
- CS9354: El elemento 'with(...)' debe ser el primero.
- CS9355: no se admiten elementos 'with(...)' para el tipo 'type'
- CS9356: los argumentos de elemento 'with(...)' no pueden ser dinámicos
- CS9357: el elemento "with(...)" para una interfaz de solo lectura debe estar vacío si está presente.
- CS9358: El tipo de elemento de esta colección no puede ser una estructura ref o un parámetro de tipo que permita estructuras ref.
- CS9359: No existe sobrecarga para el método 'method' que tome 'number' argumentos de elemento 'with(...)'
Además, en este artículo se tratan las siguientes advertencias:
- CS1062: El mejor método Add sobrecargado del elemento inicializador de la colección está obsoleto.
- CS1064: El mejor método Add sobrecargado del elemento inicializador de la colección está obsoleto.
- CS3007: El método sobrecargado "método" que sólo se diferencia por tipos de matriz sin nombre no es conforme a CLS.
- CS3016: El uso de matrices como argumentos de atributo no es conforme a CLS.
- CS0251: Indizando una matriz con un índice negativo (los índices de matriz siempre comienzan por cero).
- CS9208: La expresión de colección puede incurrir en asignaciones inesperadas del montón. Considere la posibilidad de crear explícitamente una matriz y, a continuación, convertir al tipo final para que la asignación sea explícita.
-
CS9209: La expresión de colección puede incurrir en asignaciones inesperadas del montón debido al uso de propagaciones "
..". Considere la posibilidad de crear explícitamente una matriz y, a continuación, convertir al tipo final para que la asignación sea explícita. - CS9332: No se puede usar el operador de propagación '..' en la expresión de filtro de una cláusula catch.
Acceso a elementos de matriz no válidos
- CS0022: Número incorrecto de índices dentro de [], se esperaba "número".
- CS0251: Indexación de una matriz con un índice negativo (los índices de matriz siempre comienzan por cero).
Para acceder correctamente a los elementos de la matriz, siga estas reglas de indexación. Para más información, consulte Matrices.
- Especifique el mismo número de índices que las dimensiones declaradas (CS0022). Una matriz unidimensional necesita un índice; Una matriz tridimensional necesita tres índices.
- Use solo enteros no negativos para índices de matriz (CS0251). Los índices de matriz siempre comienzan en cero.
Inicializador de colección no válido
- CS0747: Declarador de miembro de inicializador no válido.
- CS1920: El inicializador de elemento no puede estar vacío..
-
CS1921La mejor coincidencia de método sobrecargado tiene una firma errónea para el elemento inicializador. El elemento
Addinicializable debe ser un método de instancia accesible. - CS1922: No se puede inicializar el tipo 'type' con un inicializador de colección porque 'type' no implementa 'System.Collections.IEnumerable'.
- CS1925: No se puede inicializar el objeto de tipo 'tipo' con un inicializador de colección.
- CS1927: Advertencia: Omitir /win32manifest para el módulo porque solo se aplica a los ensamblados
- CS1950: El mejor método Add sobrecargado del inicializador de colección tiene algunos argumentos no válidos.
-
CS1954La mejor correspondencia del método sobrecargado para el elemento inicializador de la colección no se puede usar. Los métodos "
Add" del inicializador de la colección no pueden tener parámetrosrefoout. - CS9174No se puede inicializar el tipo con un literal de colección porque el tipo no se puede construir.
- CS9176: No hay ningún tipo de destino para el literal de colección.
- CS9203: No se puede usar una expresión de colección de este tipo en este contexto porque puede exponerse fuera del ámbito actual.
- CS9210: Esta versión de System.Collections.Immutable.ImmutableArray<T> no se puede usar con expresiones de colección.
-
CS9212: el operador spread '
..' no puede operar en variables de tipo 'type' porque 'type' no contiene una instancia pública ni una definición de extensión para 'member'. - CS9213: la expresión de colección de destino 'type' no tiene ningún tipo de elemento.
- CS9214: el tipo de expresión de colección debe tener un constructor aplicable al que se pueda llamar sin argumentos.
- CS9215: el tipo de expresión de colección 'type' debe tener una instancia o un método de extensión 'Add' al que se puede llamar con un único argumento.
- CS9222: el inicializador de colección da como resultado una cadena infinita de instancias de la colección 'type'.
- CS9332: No se puede usar el operador de propagación '..' en la expresión de filtro de una cláusula catch.
- CS9354: El elemento 'with(...)' debe ser el primer elemento
- CS9355: no se admiten elementos 'with(...)' para el tipo 'type'
- CS9356: los argumentos de elemento 'with(...)' no pueden ser dinámicos
- CS9357: el elemento "with(...)" para una interfaz de solo lectura debe estar vacío si está presente.
- CS9358: El tipo de elemento de esta colección no puede ser una estructura ref ni un parámetro de tipo que permita estructuras ref.
- CS9359: Ninguna sobrecarga del método 'method' acepta 'number' argumentos de elemento 'con (...)'
El compilador también puede generar las siguientes advertencias:
- CS1062: El mejor método Add sobrecargado del elemento inicializador de la colección está obsoleto.
- CS1063: El mejor método Add sobrecargado del elemento inicializador de la colección está obsoleto.
- CS1064: El mejor método Add sobrecargado del elemento inicializador de la colección está obsoleto.
- CS9208: La expresión de colección puede incurrir en asignaciones inesperadas del montón. Considere la posibilidad de crear explícitamente una matriz y, a continuación, convertir al tipo final para que la asignación sea explícita.
-
CS9209: La expresión de colección puede incurrir en asignaciones inesperadas del montón debido al uso de propagaciones "
..". Considere la posibilidad de crear explícitamente una matriz y, a continuación, convertir al tipo final para que la asignación sea explícita.
Para crear inicializadores de colección válidos, siga estas reglas. Para obtener más información, consulte Expresiones de colecciones.
- No mezcle la inicialización de propiedades con la adición de elementos en el mismo inicializador (CS0747).
- Incluya al menos un elemento en inicializadores de colección con llaves (CS1920).
- Asegúrese de que el tipo de colección implementa
IEnumerable(CS1922). - Use inicializadores de colección solo con tipos de colección (CS1925).
- Compruebe que el
Addmétodo es accesible, toma un parámetro que coincide con el tipo de elemento y no usarefmodificadores oout(CS1921, CS1954). - Resuelva sobrecargas de método ambiguas
Add(CS1950). - Proporcione un tipo de destino explícito para las expresiones de colección cuando el compilador no puede deducirlo (CS9176, CS9213).
- Asegúrese de que el tipo de colección se puede construir con un constructor sin parámetros (CS9174, CS9214).
- No use
ref structtipos en expresiones de colección que puedan infringir la seguridad ref (CS9203). - Actualice a una versión de entorno de ejecución compatible para
ImmutableArrayexpresiones de conjunto (CS9210). - Implemente patrones de enumeración (como
GetEnumerator) para la compatibilidad con operadores de propagación (CS9212). - Evite las dependencias circulares en la inicialización de la colección (CS9222).
- No utilices el operador spread en las expresiones de filtro de la cláusula catch (CS9332).
- Coloque el
with(...)elemento primero en las expresiones de colección (CS9354). - Usa los
with(...)elementos solo con tipos que admitan argumentos de expresión de colección (CS9355). - No use argumentos dinámicos en
with(...)elementos (CS9356). - Utilice un
with()vacío para los tipos de interfaz de solo lectura (CS9357). - No use tipos de estructura ref como tipos de elemento en colecciones que no las admitan (CS9358).
- Empareje el número de argumentos con las sobrecargas de constructor disponibles (CS9359).
Clasificación de matriz no válida
-
CS0178: Especificador de rango no válido: se esperaba "
," o "]". - CS0650: Declarador de matriz erróneo. Para declarar una matriz administrada, el especificador de rango precede al identificador de la variable. Para declarar un campo de búfer de tamaño fijo, utilice la palabra clave fija antes del tipo de campo.
-
CS1552: El especificador de tipo de matriz,
[], debe aparecer antes del nombre del parámetro.
Para declarar las matrices correctamente, siga el orden de sintaxis adecuado. Para obtener más información, consulte la sección Matrices y especificación del lenguaje C# sobre inicializadores de matriz.
Una declaración de matriz consta de estos tokens en orden:
- Tipo de elementos de matriz (por ejemplo,
int,stringoSomeClassType). - Los corchetes de matriz, que opcionalmente incluyan comas para varias dimensiones.
- El nombre de la variable.
Al especificar dimensiones de matriz, puede usar:
- Número de elementos entre llaves (
{y}) - Corchetes sin contenido
- Una o varias comas entre corchetes
En los ejemplos siguientes se muestran declaraciones de matriz válidas:
int[] anArrayOfIntegers;
string[,,] threeDimensionalStringArray;
Longitud de matriz no válida
- CS0248: No se puede crear una matriz con un tamaño negativo.
- CS0270: no se puede especificar el tamaño de matriz en una declaración de variable (intente inicializar con una expresión "new")
- CS1586: La creación de matriz debe disponer de un tamaño de matriz o un inicializador de matriz.
Para crear matrices con longitudes válidas, especifique el tamaño durante la inicialización, no la declaración. Para más información, consulte Matrices.
- Especifique la longitud de la matriz como parte de la inicialización, no la declaración (CS0270).
- Use solo enteros positivos para las dimensiones de matriz (CS0248).
- Proporcione un tamaño en una
newexpresión o un inicializador de matriz (CS1586).
En el ejemplo siguiente se muestran ambos mecanismos:
int[] fiveIntegers = new int[5];
string[] weekDays = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
Tipo de elemento no válido
- CS0611: Los elementos de matriz no pueden ser del tipo "type".
- CS0719: Los elementos de matriz no pueden ser de tipo estático.
- CS0820: No se puede asignar un inicializador de matriz a una variable local con tipo implícito.
- CS0826: No se encontró ningún mejor tipo para la matriz con tipo implícito
Para usar matrices con tipos de elementos correctos, siga estas restricciones de tipo. Para obtener más información, consulte Variables locales con tipo implícito y el mejor tipo común.
- No use tipos restringidos como System.TypedReference y System.ArgIterator como tipos de elementos de matriz (CS0611).
- No use
staticclases como tipos de elementos de matriz porque no se pueden crear instancias (CS0719). - Inicialice matrices con tipo implícito con una
newexpresión (CS0820). - Asegúrese de que todos los elementos de un inicializador de matriz con tipo implícito tengan el mejor tipo común posible (CS0826).
En los ejemplos siguientes se muestra cómo declarar matrices con tipo implícito:
var implicitType = new[] { 1, 2, 3 };
char c = 'c';
short s1 = 0;
short s2 = -0;
short s3 = 1;
short s4 = -1;
// common type is "int"
var commonType = new[] { s1, s2, s3, s4, c, 1 };
Para garantizar un mejor tipo común, use cualquiera de estas técnicas:
- Proporcione un tipo explícito a la matriz.
- Proporcione el mismo tipo a todos los elementos de matriz.
- Proporcione conversiones explícitas en elementos que podrían estar causando el problema.
Inicializador de matriz no válido
- CS0623: Los inicializadores de matriz solo se pueden utilizar en un inicializador de campo o variable. Pruebe a utilizar una expresión new en su lugar.
- CS0846Se espera un inicializador de matriz anidada.
- CS1925: No se puede inicializar el objeto de tipo 'tipo' con un inicializador de colección.
Estos errores indican una sintaxis de inicializador de matriz no válida. Para más información, consulte Matrices.
Para crear inicializadores de matriz válidos:
- Use inicializadores de matriz solo en declaraciones de variable o campo (CS0623). Use una
newexpresión en otros contextos. - Equilibrar llaves (
{y}) alrededor de elementos o matrices secundarias (CS0846). - Asegúrese de que la expresión de inicialización coincide con el número de matrices en una inicialización de matriz escalonada.
- Use inicializadores de colección solo con tipos de colección, no con matrices u otros tipos (CS1925).
Generador de colecciones no válido
- CS9175: es posible que un árbol de expresiones no contenga una expresión de colección.
- CS9177: El tipo de valor devuelto del método de generador "CollectionBuilderAttribute" debe coincidir con el tipo de colección usado en "betterness".
- CS9178: no hay ningún tipo de destino para el tipo natural "type".
- CS9179: el tipo de expresión de colección debe tener un constructor aplicable al que se pueda llamar sin argumentos.
- CS9180: el método de generador 'CollectionBuilderAttribute' debe ser un método estático.
- CS9181: El tipo de parámetro del método de generador 'CollectionBuilderAttribute' debe coincidir con el parámetro 'ReadOnlySpan<{0}>'
- CS9182: 'CollectionBuilderAttribute' no válido. No se encontró ningún método '{0}' coincidente en el tipo de generador '{1}'.
- CS9183: El tipo de valor devuelto del método 'CollectionBuilderAttribute' debe ser un tipo de valor devuelto no abstracto y no de interfaz que se pueda usar como un "tipo".
- CS9185: no se puede usar un tipo estático como argumento de tipo.
-
CS9186: El
CollectionBuilderAttributemétodo no es válido. - CS9187: No se pudo encontrar un método 'Create' accesible con la firma esperada: un método estático con un único parámetro de tipo 'ReadOnlySpan<{0}>' y el tipo de valor devuelto '{1}'.
- CS9188: 'scoped' no se puede usar como modificador en un parámetro de tipo de expresión de colección.
- CS9190: El método 'CollectionBuilderAttribute' 'builderMethod' es inapplicable porque es genérico.
- CS9192: las conversiones de matriz insertada no se pueden usar con expresiones de colección.
- CS9193: El argumento 'argument' no puede pasarse con la palabra clave 'ref'.
- CS9194: es posible que el argumento 'argument' no se pase con la palabra clave 'out'
- CS9195: El argumento 'argument' no debe pasarse con la palabra clave 'in'
- CS9196: La característica 'expresión de colección' no está disponible en C# 'version'. Utilice la versión de lenguaje 'requiredVersion' o superior.
- CS9197: La característica "inline arrays" no está disponible en C# "version". Use la versión del lenguaje "requiredVersion" o superior.
- CS9198: la característica "ref y unsafe en métodos asincrónicos e iteradores" no está disponible en C# "version". Use la versión de idioma "requiredVersion" o superior.
- CS9199: la característica "expresión de colección" no está disponible en C# "version". Use la versión de idioma "requiredVersion" o superior.
- CS9202: Esta característica, 'parámetros de solo lectura ref', no está disponible en C# "version". Utilice la versión de lenguaje "requiredVersion" o superior.
- CS9208: el operador 'nameof' no se puede usar en un acceso de matriz en línea.
- CS9209: no se puede usar una propiedad de devolución de referencia 'property' como argumento de valor.
- CS9211: La expresión debe ser de tipo 'type' porque se asigna por referencia.
- CS9212: No se puede usar la expresión de colección como valor en una instrucción fija
- CS9217: no se puede conservar un valor local "ref" a través del límite "await" o "yield".
- CS9218: 'paramName' es una estructura ref y no puede ser el tipo de un parámetro
- CS9221: El tipo 'type' puede no ser una estructura ref o un parámetro de tipo que permita estructuras ref para usarlo como parámetro 'parameter' en el tipo genérico o método 'member'
- CS9223: no se puede usar una estructura que contenga campos "ref" en una expresión de colección.
- CS9228: no se permite la declaración no variable de una estructura ref.
- CS9232: las declaraciones de método parcial tienen diferencias de firma.
- CS9233: el modificador 'file' solo se puede usar en los tipos definidos en el nivel superior de una unidad de compilación.
Para crear expresiones de colección con atributos del generador de colecciones correctamente, siga estos requisitos. Para obtener más información, consulte Expresiones de colecciones.
- Asegúrese de que el tipo de destino tenga un tipo de iteración que admita
foreach(CS9188). - No use tipos genéricos como tipos de generador de colecciones (CS9185).
- Compruebe que el nombre del método especificado en
CollectionBuilderAttributees válido (CS9186). - Aplique
CollectionBuilderAttributesolo con métodos estáticos que coincidan con la firma necesaria: devuelva el tipo de colección y tome unReadOnlySpan<T>parámetro dondeTcoincida con el tipo de elemento (CS9180, CS9181, CS9182, CS9183, CS9187, CS9190). - Asegúrese de que el tipo de valor devuelto coincide y no es abstracto o una interfaz (CS9177, CS9183).
- No use structs ref ni tipos con campos ref en expresiones de colección (CS9218, CS9221, CS9223, CS9228).
- Evite usar expresiones de colección en árboles de expresión (CS9175).
- Use la versión de lenguaje correcta para expresiones de colección y características relacionadas (CS9196, CS9197, CS9198, CS9199, CS9202).
Advertencias de especificación de lenguaje común
- CS3007: El método sobrecargado "método" que sólo se diferencia por tipos de matriz sin nombre no es conforme a CLS.
- CS3016: El uso de matrices como argumentos de atributo no es conforme a CLS.
Para escribir código conforme a CLS con matrices, siga estas instrucciones. Para obtener más información, consulte Independencia del lenguaje.
- No cree métodos sobrecargados que solo difieren en los tipos de elementos de matriz (CS3007).
- No use matrices como argumentos de atributo (CS3016).
CS3007 ocurre si tiene un método sobrecargado que toma una matriz irregular y la única diferencia entre las firmas del método es el tipo de elemento de la matriz. Para evitar este error, considere usar una matriz rectangular en lugar de una matriz irregular o, si no es necesario el cumplimiento de CLS, elimine el atributo CLSCompliantAttribute. Para obtener más información sobre la conformidad con CLS, vea Independencia del lenguaje y componentes independientes del lenguaje.
CS3016 indica que no cumple con la Common Language Specification (CLS) para pasar una matriz a un atributo. Para obtener más información sobre la conformidad con CLS, consulte Independencia del lenguaje y componentes independientes del lenguaje.