编译器错误 CS1666

更新:2007 年 11 月

错误消息

不能使用非固定表达式中包含的固定大小缓冲区。请尝试使用 fixed 语句。

如果您在一个涉及本身不固定的类的表达式中使用固定大小缓冲区,则会出现此错误。运行库可以自由地将未固定的类到处移动以优化内存访问,这在使用固定大小缓冲区时可能会导致错误。为避免此错误,请在语句中使用 fixed 关键字。

示例

下面的示例生成 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); 
   } 
}