Leer en inglés

Compartir a través de


Error del compilador CS0212

Solo se puede adquirir la dirección de una expresión de tipo unfixed de un inicializador de instrucción fixed

Para obtener más información, vea Código no seguro y punteros (Guía de programación de C#).

En el ejemplo siguiente se muestra cómo obtener la dirección de una expresión sin corregir. El ejemplo siguiente genera la advertencia CS0212.

C#
// 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) {}  
   }  
}  

El ejemplo siguiente también genera la advertencia CS0212 y se muestra cómo resolverlo:

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