Sdílet prostřednictvím


Compilerfehler CS1666

Aktualisiert: November 2007

Fehlermeldung

Sie können keine Puffer fester Größe verwenden, die in nicht festen Ausdrücken enthalten sind. Verwenden Sie die fixed-Anweisung
You cannot use fixed size buffers contained in unfixed expressions. Try using the fixed statement.

Dieser Fehler tritt auf, wenn Sie einen Puffer fester Größe in einem Ausdruck verwenden, der eine Klasse einbezieht, die nicht über eine feste Größe verfügt. In der Laufzeit kann die ungebundene Klasse beliebig verschoben werden, um den Speicherzugriff zu optimieren. Dies kann bei Verwendung eines Puffers fester Größe zu Fehlern führen. Um diesen Fehler zu vermeiden, wenden Sie das fixed-Schlüsselwort auf die Anweisung an.

Beispiel

Im folgenden Beispiel wird CS1666 generiert.

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