Error del compilador · error CS0131
El lado izquierdo de una asignación debe ser una variable, propiedad o indizador
La asignación (=) guarda un valor dentro de algo. Si el lado izquierdo no tiene almacenamiento — una constante, un literal, una expresión calculada — no hay dónde ponerlo, y el compilador lo dice.
Causa 1: asignar a una constante
const int Max = 100;
Max = 200; // CS0131: 'const' significa que NUNCA cambia — ese es el trato
const es una promesa en compilación: el valor queda grabado, para siempre. Si el valor necesita cambiar de verdad, no es una constante:
int max = 100; // una variable…
Console.WriteLine(max);
max = 200; // …se puede reasignar libremente
Console.WriteLine(max);
El término medio en código real es static readonly — se asigna una vez al arrancar, inmutable después, pero no es constante de compilación.
Causa 2: asignar a una expresión
int x = 5;
x + 1 = 10; // 'x + 1' calcula un valor — no hay caja donde guardar 10
Casi siempre es una comparación invertida o un destino mal escrito. ¿Qué querías?
int x = 5;
bool esDiez = (x + 1) == 10; // ¿comparando? eso es '==', y ambos lados pueden ser expresiones
Console.WriteLine(esDiez);
int x = 5;
x = x + 1; // guardar de vuelta EN la variable: a la izquierda solo 'x'
Console.WriteLine(x);
Qué SÍ puede ir a la izquierda
| Lado izquierdo | Guarda en | Ejemplo |
|---|---|---|
| variable | la variable | x = 5; |
| propiedad | el almacén de la propiedad | obj.Nombre = "Ada"; |
| indizador | esa posición | arr[0] = 5; / dict["k"] = v; |
| campo | el campo del objeto | perro.Edad = 3; |
Todo lo demás — literales (5 = x;), constantes, llamadas a métodos, aritmética — produce un valor en vez de contenerlo, y nunca puede estar a la izquierda.
Preguntas frecuentes
¿Qué significa CS0131 en C#?
El lado izquierdo de = no puede almacenar un valor — es constante, literal o expresión. Solo pueden ir variables, propiedades, campos o indizadores; si querías comparar, usa ==.
¿Se puede asignar a un const?
Nunca — const es una promesa de compilación. Si el valor debe cambiar, usa una variable normal (o static readonly asignado una vez).
Lista de comprobación
- A la izquierda de
=: un nombre desnudo, un.Miembroo un[índice]. Nada más. =guarda;==compara. Un carácter, significados opuestos.constno se puede reasignar por diseño — usa variable si debe cambiar.x = x + 1es legal (guardar el resultado enx);x + 1 = …no lo es.