Error del compilador CS1666

Actualización: noviembre 2007

Mensaje de error

No puede utilizar los búferes de tamaño fijo contenidos en expresiones de tipo unfixed. Intente usar la instrucción fixed.
You cannot use fixed size buffers contained in unfixed expressions. Try using the fixed statement.

Este error se produce si se utiliza el búfer de tamaño fijo en una expresión que implica una clase que no es fija. En tiempo de ejecución, se puede cambiar de lugar la clase no fija para optimizar el acceso a la memoria, lo que puede provocar errores cuando se utiliza un búfer de tamaño fijo. Para evitar este error, utilice la palabra clave fixed en la instrucción.

Ejemplo

El código siguiente genera el error 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); 
   } 
}