Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Błąd kompilatora CS0841

Nie można użyć zmiennej lokalnej "name", zanim zostanie zadeklarowana.

Przed jego zastosowaniem należy zadeklarować zmienną.

Przykład zmiennej używanej przed deklaracją

Poniższy przykład generuje CS0841:

// cs0841.cs
using System;

public class Program
{
    public static void Main()
    {
        j = 5; // CS0841
        int j;
    }
}

Popraw błąd, przenosząc deklarację przed użyciem

Przenieś deklarację zmiennej przed wierszem, w którym występuje błąd.

using System;  

public class Program
{
    public static void Main()
    {
        int j;
        j = 5;
    }
}

Przykład zmiennej w tle typu

W poniższym przykładzie intencja była porównywana parameter z MyEnum.A. Ponieważ zmienna lokalna zadeklarowana później o tej samej nazwie typu, w tle typ MyEnum i MyEnum w tej metodzie nie odwołuje się już do zmiennej enum, ale odwołuje się do zadeklarowanej zmiennej lokalnej.

using System;

public enum MyEnum
{
    A, B, C
}

public class C
{
    public void M(MyEnum parameter)
    {
        // error CS0841: Cannot use local variable 'MyEnum' before it is declared
        if (parameter == MyEnum.A)
        {
            return;
        }

        // Change the variable to 'myEnum' to avoid shadowing the 'MyEnum' type.
        // This change also aligns with the C# coding conventions.
        var MyEnum = parameter;
        Console.WriteLine(MyEnum.ToString());
    }
}