Erro do Compilador CS1708

Buffers de tamanho fixo só podem ser acessados por meio de locais ou campos

Um novo recurso do C# 2.0 é a capacidade de definir uma matriz em linha dentro de um struct. Essas matrizes só podem ser acessadas por meio de variáveis locais ou campos e não podem ser referenciadas como valores intermediários no lado esquerdo de uma expressão. Além disso, as matrizes não podem ser acessadas por campos que sejam static ou readonly.

Para resolver esse erro, defina uma variável de matriz e atribua a matriz em linha à variável. Também é possível remover o modificador static ou readonly do campo que representa a matriz em linha.

Exemplo

O exemplo a seguir gera o erro CS1708.

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