Поделиться через


Ошибка компилятора 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;
}