Compilerfehler CS1708

Auf Puffer fester Größe kann nur über lokale Variablen oder Felder zugegriffen werden

Eine neue Funktion in C# 2.0 ist die Möglichkeit zum Definieren eines Inlinearray innerhalb von struct. Auf solche Arrays kann nur über lokale Variablen oder Felder zugegriffen werden und sie können nicht als Zwischenwerte auf der linken Seite eines Ausdrucks verwiesen werden. Darüber hinaus kann auf die Arrays nicht durch Felder zugegriffen werden, die static oder readonly sind.

Definieren Sie eine Arrayvariable, und weisen Sie der Variablen das Inlinearray zu, um diesen Fehler zu beheben. Oder Sie entfernen den static- oder readonly-Modifizierer aus dem Feld, welches das Inlinearray darstellt.

Beispiel

Im folgenden Beispiel wird CS1708 generiert.

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

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

public unsafe class C  
{  
    public S UnsafeMethod()  
    {  
        S myS = new S();  
        return myS;  
    }  

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

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

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

    static readonly S _s1;  
    public readonly S _s2;  
}