Compartir a través de


Error del compilador CS1708

Actualización: noviembre 2007

Mensaje de error

Sólo se puede tener acceso a los búferes de tamaño fijo mediante variables locales o campos
Fixed size buffers can only be accessed through locals or fields

Una de las nuevas características en C# 2.0 es la capacidad de definir una matriz en línea dentro de un tipo struct. A este tipo de matrices sólo se puede tener acceso mediante variables o campos locales, y no se puede hacer referencia a ellas como valores intermedios en el lado izquierdo de una expresión. Además, sólo pueden tener acceso a las matrices los campos que son static o readonly.

Para resolver este error, defina una variable de matriz y asigne la matriz en línea a la variable. O bien, quite el modificador static o readonly del campo que representa la matriz en línea.

Ejemplo

El código siguiente genera el error CS1708.

// CS1708.cs
// compile with: /unsafe
using System;

unsafe public struct Foo
{
    public fixed char name[10];
}

public unsafe class C
{
    public Foo UnsafeMethod()
    {
        Foo myFoo = new Foo();
        return myFoo;
    }

    static void Main()
    {
        C myC = new C();
        myC.UnsafeMethod().name[3] = 'a';  // CS1708
        // Uncomment the following 2 lines to resolve:
        // Foo myFoo = myC.UnsafeMethod();
        // myFoo.name[3] = 'a';

        // The field cannot be static.
        C._foo1.name[3] = 'a';  // CS1708

        // The field cannot be readonly.
        myC._foo2.name[3] = 'a';  // CS1708
    }

    static readonly Foo _foo1;
    public readonly Foo _foo2;
}