Partager via


Erreur du compilateur CS0212

Mise à jour : novembre 2007

Message d'erreur

Vous ne pouvez prendre l'adresse d'une expression non fixed qu'à l'intérieur d'un initialiseur d'instruction fixed
You can only take the address of an unfixed expression inside of a fixed statement initializer

Pour plus d'informations, consultez Pointeurs et code unsafe (Guide de programmation C#).

L'exemple suivant montre comment prendre l'adresse d'une expression non fixed. L'exemple suivant génère l'erreur 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) {}
   }
}

L'exemple suivant génère aussi l'erreur CS0212 et montre comment la corriger :

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