Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Błąd kompilatora CS0459

Nie można pobrać adresu zmiennej lokalnej tylko do odczytu

Istnieją trzy typowe scenariusze w języku C#, które generują zmienne lokalne tylko do odczytu: foreach, usingi fixed. W każdym z tych przypadków nie można zapisywać w zmiennej lokalnej tylko do odczytu ani na jego adres. Ten błąd jest generowany, gdy kompilator zdaje sobie sprawę, że próbujesz podjąć adres zmiennej lokalnej tylko do odczytu.

Przykład

Poniższy przykład generuje CS0459 podczas próby podjęcia adresu zmiennej lokalnej tylko do odczytu w foreach pętli i w fixed bloku instrukcji:

// 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;
}

Uwaga

Kompilator Roslyn został zaktualizowany i ten błąd kompilatora został usunięty, począwszy od programu Visual Studio 2017 w wersji 15.5, więc poprzedni kod zostanie pomyślnie skompilowany z tą wersją i nowszymi wersjami.