Partager via


Erreur du compilateur CS1657

Mise à jour : novembre 2007

Message d'erreur

Impossible de passer 'paramètre' comme argument ref ou out, car 'raison''
Cannot pass 'parameter' as a ref or out argument because 'reason''

Cette erreur se produit lorsqu'une variable est passée en tant qu'argument ref ou out dans un contexte dans lequel cette variable est readonly. Les contextes readonly incluent des variables d'itération foreach, des variables using, ainsi que des variables fixed. Pour corriger cette erreur, n'appelez pas les fonctions qui utilisent la variable foreach, using ou fixed comme paramètre ref ou out dans les blocs using, dans les instructions foreach et dans les instructions fixed.

Exemple

L'exemple suivant génère l'erreur CS167 :

// CS1657.cs
using System;
class C : IDisposable
{
    public int i;
    public void Dispose() {}
}

class CMain
{
    static void f(ref C c)
    {
    }
    static void Main()
    {
        using (C c = new C())
        {
            f(ref c);  // CS1657
        }
    }
}

Le code suivant illustre le même problème dans une instruction fixed :

// CS1657b.cs
// compile with: /unsafe
unsafe class C
{
    static void F(ref int* p)
    {
    }

    static void Main()
    {
        int[] a = new int[5];
        fixed(int* p = a) F(ref p); // CS1657
    }
}