Прочитать на английском

Поделиться через


Ошибка компилятора CS0841

Невозможно использовать локальную переменную "имя" до ее объявления.

Переменная должна быть объявлена, прежде чем можно будет ее использовать.

Пример переменной, используемой перед объявлением

В следующем примере возникает ошибка CS0841:

// cs0841.cs
using System;

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

Исправьте ошибку путем перемещения объявления перед использованием

Переместите объявление переменной перед строкой, где возникает ошибка.

using System;  

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

Пример переменной тени типа

В следующем примере намерение сравнивается parameter с MyEnum.A. Так как локальная переменная, объявленная позже с тем же именем типа, она тени типа MyEnum и MyEnum в этом методе больше не ссылается enumна нее, но ссылается на объявленную локальную переменную.

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());
    }
}