Derleyici Hatası CS0677

'variable': Geçici bir alan 'type' türünde olamaz

anahtar sözcüğüyle volatile bildirilen alanlar aşağıdaki türlerden biri olmalıdır:

  • Herhangi bir başvuru türü.

  • Herhangi bir işaretçi türü (bağlamda unsafe ).

  • , , , , , ushort, int, uint, char, floattürleriboolsbyte. shortbyte

  • Listelenen türlerden herhangi birini temel alan numaralandırma türleri.

Aşağıdaki örnek CS0677 oluşturur:

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

Olası geçici çözümler

Bazı senaryolarda CS0677 için geçici çözüm olarak yerine long (yerel boyutlu tamsayı) kullanabilirsiniz nint . Türün nint atomik erişimi desteklemesi garanti edilir ve anahtar sözcüğüyle volatile kullanılabilir:

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

Tür nint , 32 bit platformlarda 32 bit ve 64 bit platformlarda 64 bit olan yerel boyutlu bir tamsayıdır. 64 bit platformlarda, nint ile aynı boyuta ve aralığa longsahiptir, ancak atomik erişimi garanti etmek için tasarlanmıştır. Bu geçici çözüm en uygun zaman:

  • Kodunuz ile aynı aralığı longsağlayan 64 bit platformları nint hedefler.
  • Çok iş parçacıklı bağlamdaki büyük bir tamsayı değerine atomik erişime ihtiyacınız vardır.
  • Platforma özgü tamsayı boyutu davranışı, kullanım örneğiniz için kabul edilebilir.

Yerel boyutlu tamsayılar hakkında daha fazla bilgi için bkz. Tam sayı türleri.

İş parçacığı güvenli programlamayla ilgili genel yönergeler olarak alanlar yerine volatile işlemleri veya lock deyimi kullanmayı Interlocked göz önünde bulundurun.