Error del compilador CS0212

Actualización: noviembre 2007

Mensaje de error

Sólo se puede adquirir la dirección de una expresión de tipo unfixed de un inicializador de instrucción fixed
You can only take the address of an unfixed expression inside of a fixed statement initializer

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 adquirir la dirección de una expresión unfixed. El código siguiente genera el error 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) {}
   }
}

El ejemplo siguiente también genera el error CS0212 y muestra una manera de resolverlo:

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