CS1657 de erro do compilador

Mensagem de erro

Não é possível passar 'parâmetro' sistema autônomo ref ou out argumento porque ' motivo ''

Este erro ocorre quando uma variável é passada sistema autônomo um ref or check-out argumento em um contexto em que essa variável é somente leitura.Contextos de somente leitura incluem foreach iteração variáveis, usando o as variáveis e fixed variáveis. Para resolver esse erro, não chamam funções que levam a foreach, using ou fixed variável sistema autônomo um ref ou out parâmetro em using blocos, foreach instruções, e fixed instruções.

Exemplo

O exemplo a seguir gera CS1657:

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

O código a seguir ilustra o mesmo problema em um fixed demonstrativo:

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