Ошибка компилятора CS1708
Обновлен: Ноябрь 2007
Сообщение об ошибке
Доступ к буферам фиксированного размера возможен только через локальные переменные или поля
Fixed size buffers can only be accessed through locals or fields
Новая возможность в языке C# версии 2.0 позволяет определять встроенный массив внутри struct. Доступ к таким массивам возможен только через локальные переменные или поля и на них не может существовать ссылок как на промежуточные значения слева от выражения. Кроме того, доступ к массивам через поля static или readonly невозможен.
Чтобы устранить эту ошибку, определите переменную массива и присвойте встроенный массив этой переменной. Можно также удалить модификатор static или readonly из поля, представляющего встроенный массив.
Пример
Следующий пример приводит к возникновению ошибки 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;
}