Share via


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