Error del compilador · error CS0128

Ya existe una variable local con el nombre 'X' en este ámbito

Declaraste el mismo nombre dos veces en el mismo ámbito. En C#, declarar reserva el nombre — una segunda declaración choca, aunque los tipos coincidan.

Míralo ocurrir

int score = 90;
Console.WriteLine(score);
int score = 85;     // CS0128: 'score' ya está ocupado en este ámbito

Solución 1: querías ASIGNAR, no redeclarar

La forma más común: pegaste una línea que aún lleva su tipo. La asignación usa el nombre desnudo:

int score = 90;
Console.WriteLine(score);
score = 85;         // sin 'int' — asignación simple
Console.WriteLine(score);

Regla: la palabra clave del tipo (int, string, var…) aparece UNA vez por ámbito y nombre. Todo uso posterior es solo el nombre.

Solución 2: querías dos variables distintas

int original = 90;
int revisado = 85;               // realmente dos cosas: dos nombres
Console.WriteLine($"original: {original}, revisado: {revisado}");

La parte confusa: el mismo nombre en ámbitos DISTINTOS es legal

Los bloques crean ámbitos. Una variable declarada dentro del cuerpo de un bucle es nueva en cada iteración — y un parámetro de método puede compartir nombre con un campo:

for (int i = 0; i < 2; i++)
{
    int slot = i + 1;      // 'slot' nuevo en cada iteración — sin colisión
    Console.WriteLine(slot);
}

for (int i = 0; i < 2; i++)   // un segundo bucle SÍ puede reusar 'i': otro ámbito
{
    Console.WriteLine(i + 1);
}

class Perro
{
    public string Nombre = "campo";

    public void Renombrar(string Nombre)     // el parámetro oculta el campo — legal
    {
        Console.WriteLine("el parámetro gana dentro");
    }
}
new Perro().Renombrar("Rex");

CS0128 solo trata de un ámbito, un nombre. Que ámbitos anidados oculten nombres externos es legal — pero mal visto, porque el lector pierde de vista qué variable está mirando. Prefiere nombres distintos.

Preguntas frecuentes

¿Qué significa CS0128 en C#?

El mismo nombre local declarado dos veces en el mismo ámbito — normalmente una línea copiada con su tipo. Quita el tipo en la segunda línea o renombra una variable.

¿Pueden dos variables compartir nombre en ámbitos distintos?

Sí. Dos bucles separados pueden declarar int i; el cuerpo del bucle es un ámbito nuevo en cada iteración. CS0128 solo salta en el mismo ámbito.

Lista de comprobación