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