Error del compilador CS1649

Actualización: noviembre 2007

Mensaje de error

Los miembros del campo de sólo lectura 'identificador' no se pueden pasar como out o ref (excepto en un constructor)
Members of readonly field 'identifier' cannot be passed ref or out (except in a constructor)

Este error se produce cuando se pasa una variable a una función que es miembro de un campo readonly como argumento ref o out. Esto no se permite porque la función puede modificar los parámetros ref o out. Para resolver este error, quite la palabra clave readonly del campo o no pase los miembros del campo readonly a la función. Por ejemplo, puede intentar crear una variable temporal que se pueda modificar y pasarla como argumento ref, como se muestra en el ejemplo siguiente.

Ejemplo

El código siguiente genera el error 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);
    }
}