Baca dalam bahasa Inggris

Bagikan melalui


Kesalahan Pengompilasi CS0212

Anda hanya dapat mengambil alamat ekspresi tidak tetap di dalam penginisialisasi pernyataan tetap

Untuk informasi selengkapnya, lihat Kode dan Pointer Tidak Aman.

Sampel berikut menunjukkan cara mengambil alamat ekspresi tidak tetap. Sampel berikut menghasilkan CS0212.

// CS0212a.cs  
// compile with: /unsafe /target:library  
  
public class A {  
   public int iField = 5;  
  
   unsafe public void M() {
      A a = new A();  
      int* ptr = &a.iField;   // CS0212
   }  
  
   // OK  
   unsafe public void M2() {  
      A a = new A();  
      fixed (int* ptr = &a.iField) {}  
   }  
}  

Sampel berikut juga menghasilkan CS0212 dan menunjukkan cara mengatasi kesalahan:

// CS0212b.cs  
// compile with: /unsafe /target:library  
using System;  
  
public class MyClass  
{  
   unsafe public void M()  
   {  
      // Null-terminated ASCII characters in an sbyte array
      sbyte[] sbArr1 = new sbyte[] { 0x41, 0x42, 0x43, 0x00 };  
      sbyte* pAsciiUpper = &sbArr1[0];   // CS0212  
      // To resolve this error, delete the previous line and
      // uncomment the following code:  
      // fixed (sbyte* pAsciiUpper = sbArr1)  
      // {  
      //    String szAsciiUpper = new String(pAsciiUpper);  
      // }  
   }  
}