Прочитать на английском

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


Ошибка компилятора CS1666

Нельзя использовать буферы фиксированного размера в нефиксированных выражениях. Попробуйте использовать оператор fixed.

Эта ошибка возникает при использовании буфера фиксированного размера в выражении с участием экземпляра, который не является фиксированным. Среда выполнения может перемещать нефиксируемый экземпляр вокруг, чтобы оптимизировать доступ к памяти, что может привести к ошибкам при использовании буфера фиксированного размера. Чтобы избежать этой ошибки, используйте инструкциюfixed.

Пример

Следующий пример приводит к возникновению ошибки CS1666.

C#
// 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);
   }
}