コンパイラ エラー CS1708

更新 : 2007 年 11 月

エラー メッセージ

固定 バッファには、ローカルまたはフィールドをとおしてのみアクセスできます。

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;
}