Share via


Erreur du compilateur CS1708

Mise à jour : novembre 2007

Message d'erreur

Les mémoires tampons de taille fixe ne sont accessibles que via des variables locales ou des champs
Fixed size buffers can only be accessed through locals or fields

Une nouvelle fonctionnalité de C# 2.0 permet de définir un tableau inline dans un struct. L'accès à ces tableaux s'effectue uniquement via des variables locales ou des champs et ils ne peuvent pas être référencés comme valeurs intermédiaires dans la partie gauche d'une expression. Par ailleurs, les tableaux ne sont pas accessibles par des champs qui sont static ou readonly.

Pour résoudre cette erreur, définissez une variable de tableau et affectez le tableau inline à la variable. Vous pouvez également supprimer le modificateur static ou readonly du champ qui représente le tableau inline.

Exemple

L'exemple suivant génère l'erreur 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;
}