Errore del compilatore CS1649

Aggiornamento: novembre 2007

Messaggio di errore

I membri del campo readonly 'identificatore' non possono essere passati a un parametro ref o out (tranne che in un costruttore).
Members of readonly field 'identifier' cannot be passed ref or out (except in a constructor)

Questo errore si verifica quando si passa a una funzione una variabile membro di un campo readonly come argomento ref o out. Questa operazione non è consentita perché i parametri ref e out possono venire modificati dalla funzione. Per correggere l'errore, rimuovere la parola chiave readonly dal campo oppure non passare i membri del campo readonly alla funzione. È ad esempio possibile creare una variabile temporanea che può essere modificata e passare tale variabile sotto forma di argomento ref, come descritto di seguito.

Esempio

Il seguente codice di esempio genera l'errore CS1649:

// CS1649.cs
public struct Inner
    {
        public int i;
    }

class Outer
{
    public readonly Inner inner = new Inner();
}

class D
{
    static void f(ref int iref)
    {
    }

    static void Main()
    {
        Outer outer = new Outer(); 
        f(ref outer.inner.i);  // CS1649
        // Try this code instead:
        // int tmp = outer.inner.i;
        // f(ref tmp);
    }
}