Compilerfehler CS1708
Aktualisiert: November 2007
Fehlermeldung
Auf Puffer fester Größe kann nur über lokale Variablen oder Felder zugegriffen werden.
Fixed size buffers can only be accessed through locals or fields
Als neues Feature besteht in C# 2.0 die Möglichkeit, innerhalb von struct ein Inlinearray zu definieren. Auf solche Arrays kann nur über lokale Variablen oder Felder zugegriffen werden, und auf sie darf nicht als temporäre Werte auf der linken Seite eines Ausdrucks verwiesen werden. Auch kann auf die Arrays nicht von Feldern aus zugegriffen werden, die die Eigenschaften static oder readonly besitzen.
Definieren Sie zum Beheben dieses Fehlers eine Arrayvariable, und weisen Sie dieser Variablen das Inlinearray zu. Oder entfernen Sie den static-Modifizierer oder den readonly-Modifizierer aus dem Feld, das das Inlinearray darstellt.
Beispiel
Im folgenden Beispiel wird CS1708 generiert.
// 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;
}