Partager via


Erreur du compilateur CS1649

Mise à jour : novembre 2007

Message d'erreur

Les membres d'un champ readonly 'identificateur' ne peuvent pas être passés en ref ou out (sauf s'ils appartiennent à un constructeur)
Members of readonly field 'identifier' cannot be passed ref or out (except in a constructor)

Cette erreur se produit si vous passez une variable à une fonction qui est membre d'un champ readonly en tant qu'argument ref ou out. Dans la mesure où les paramètres ref et out peuvent être modifiés par la fonction, cela n'est pas autorisé. Pour résoudre cette erreur, supprimez le mot clé readonly du champ ou ne passez pas les membres du champ readonly à la fonction. Par exemple, vous pouvez essayer de créer une variable temporaire modifiable et de la passer en tant qu'argument ref, comme l'illustre l'exemple suivant.

Exemple

L'exemple suivant génère l'erreur 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);
    }
}