CS1666 de erro do compilador

Mensagem de erro

Não é possível usar buffers de dimensionar fixo contidos em expressões unfixed.Tente usar a demonstrativo fixed.

Este erro ocorre se você usar o buffer de tamanho fixo em uma expressão que envolve uma classe que não é propriamente dito fixo.O tempo de execução está disponível para mover a classe unfixed para otimizar o acesso de memória, que poderia levar a erros quando usar o fixo em tamanho de buffer.Para evitar esse erro, use o fixed palavra-chave na demonstrativo.

Exemplo

O exemplo a seguir gera CS1666.

// CS1666.cs
// compile with: /unsafe /target:library
unsafe struct S
{
   public fixed int buffer[1];
}

unsafe class Test
{
   S field = new S();

   private bool example1()
   {
      return (field.buffer[0] == 0);   // CS1666 error
   }

   private bool example2()
   {
      // OK
      fixed (S* p = &field)
      {
         return (p->buffer[0] == 0);
      }
   }

   private bool example3()
   {
      S local = new S();
      return (local.buffer[0] == 0); 
   } 
}