Compilerfehler CS0677

'Variable': Ein veränderliches Feld darf nicht vom Typ 'Type' sein.

Mit dem volatile Schlüsselwort deklarierte Felder müssen einen der folgenden Typen aufweisen:

  • Jeder Bezugstyp.

  • Jeder Zeigertyp (in einem unsafe Kontext).

  • Die Typen sbyte, , byte, short, intushort, uint, char, , , . floatbool

  • Enumerationstypen basierend auf einem der aufgelisteten Typen.

Im folgenden Beispiel wird CS0677 generiert:

// CS0677.cs  
class TestClass  
{  
   private volatile long i;   // CS0677  
  
   public static void Main()  
   {  
   }  
}  

Mögliche Problemumgehungen

In einigen Szenarien können Sie möglicherweise (ganzzahlige Größe) anstelle long einer Problemumgehung für CS0677 verwenden nint . Der nint Typ wird garantiert den atomen Zugriff unterstützen und kann mit dem volatile Schlüsselwort verwendet werden:

class TestClass  
{  
   private volatile nint i;   // This compiles successfully
  
   public static void Main()  
   {  
   }  
}  

Der nint Typ ist eine ganzzahlige Größe, die 32-Bit auf 32-Bit-Plattformen und 64-Bit-Plattformen auf 64-Bit-Plattformen ist. Auf 64-Bit-Plattformen hat die gleiche Größe und Reichweite wie long, aber es ist darauf ausgelegt, nint den Atomzugriff zu garantieren. Diese Problemumgehung ist am besten geeignet, wenn:

  • Ihr Code zielt auf 64-Bit-Plattformen ab, auf denen nint derselbe Bereich bereitgestellt wird wie long.
  • Sie benötigen einen atomigen Zugriff auf einen großen ganzzahligen Wert in einem Multithread-Kontext.
  • Plattformspezifisches Ganzzahlgrößenverhalten ist für Ihren Anwendungsfall akzeptabel.

Weitere Informationen zu ganzzahligen Zahlen in systemeigener Größe finden Sie unter integrale numerische Typen.

Als allgemeine Anleitung zur threadsicheren Programmierung sollten Sie Vorgänge oder die lock Anweisung anstelle von volatile Feldern verwendenInterlocked.