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

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


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

Невозможно получить адрес локальной переменной, доступной только для чтения

В языке C# существует три типичных сценария, формирующие локальные переменные только для чтения: foreach, usingи fixed. В каждом из этих случаев нельзя выполнять запись в локальную переменную только для чтения или получать ее адрес. Эта ошибка возникает, когда компилятор определяет, что вы пытаетесь получить адрес локальной переменной, доступной только для чтения.

Пример

В следующем примере возникает ошибка CS0459 при попытке принять адрес локальной переменной только для чтения в foreach цикле и блоке fixed инструкций:

C#
// CS0459.cs
// compile with: /unsafe

class Program
{
    public unsafe void M1()
    {
        int[] ints = new int[] { 1, 2, 3 };
        foreach (int i in ints)
        {
            int *j = &i;  // CS0459
        }

        fixed (int *i = &_i)
        {
            int **j = &i;  // CS0459
        }
    }

    private int _i = 0;
}

Примечание

Компилятор Roslyn был обновлен, и эта ошибка компилятора была удалена начиная с Visual Studio 2017 версии 15.5, поэтому предыдущий код успешно компилируется с этой версией и более поздними версиями.