Errore del compilatore CS1708
Aggiornamento: novembre 2007
Messaggio di errore
È possibile accedere ai buffer di dimensione fissa solo tramite variabili locali o campi.
Fixed size buffers can only be accessed through locals or fields
Una nuova funzionalità di C# 2.0 consente di definire una matrice inline all'interno di una struct. Queste matrici sono accessibili solo tramite variabili locali o campi e non è possibile fare riferimento ad esse come a valori intermedi nella parte sinistra di un'espressione. Inoltre, non è possibile accedere alle matrici da campi static o readonly.
Per correggere l'errore, definire una variabile di matrice e assegnare a quest'ultima la matrice inline. In alternativa, rimuovere il modificatore static o readonly dal campo che rappresenta la matrice inline.
Esempio
Il seguente codice di esempio genera l'avviso 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;
}