Error del compilador CS1657
Actualización: noviembre 2007
Mensaje de error
No se puede pasar 'parámetro' como argumento ref o out porque 'motivo'
Cannot pass 'parameter' as a ref or out argument because 'reason''
Este error se produce cuando se pasa una variable como argumento ref o out en un contexto en el que esa variable es de sólo lectura. Los contextos de sólo lectura incluyen las variables de iteración foreach, las variables using y las variables fixed. Para resolver este error, no llame a funciones que utilicen la variable foreach, using o fixed como un parámetro ref o out en bloques using, instrucciones foreach e instrucciones fixed.
Ejemplo
El código siguiente genera el error 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
}
}
}
El código siguiente ilustra el mismo problema en una instrucción 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
}
}