Sdílet prostřednictvím


Compilerfehler CS1657

Aktualisiert: November 2007

Fehlermeldung

"Parameter" kann nicht als ref oder aus Argument übergeben werden, da "Grund".
Cannot pass 'parameter' as a ref or out argument because 'reason''

Dieser Fehler tritt auf, wenn eine Variable als ref- oder out-Argument in einem Kontext verwendet wird, in dem diese Variable schreibgeschützt ist. Schreibgeschützte Kontexte schließen foreach-Iterationsvariablen, using-Variablen und fixed-Variablen ein. Um diesen Fehler zu beheben, rufen Sie keine Funktionen auf, die foreach-, using- oder fixed-Variablen als ref- oder out-Parameter in using-Blöcken, foreach-Anweisungen sowie fixed-Anweisungen verwenden.

Beispiel

Im folgenden Beispiel wird der Fehler CS1657 generiert:

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

Im folgenden Code wird das gleiche Problem für eine fixed-Anweisung veranschaulicht:

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