Errore del compilatore CS1944

Aggiornamento: novembre 2007

Messaggio di errore

Una struttura ad albero dell'espressione non può contenere un'operazione di puntatore unsafe
An expression tree may not contain an unsafe pointer operation

Le strutture ad albero dell'espressione non supportano tipi di puntatore perché il metodo Expression<TDelegate>.Compile può produrre solo codice verificabile. Vedere commenti.

Per correggere l'errore

  • Non utilizzare tipi di puntatore quando si tenta di creare una struttura ad albero dell'espressione.

Esempio

Nell'esempio seguente viene generato l'errore CS1944:

// cs1944.cs
// Compile with: /unsafe
using System.Linq.Expressions;
unsafe class Test
{
    public delegate int* D(int i);
    static void Main()
    {
        Expression<D> tree = x => &x; // CS1944
    }
}

using System.Linq.Expressions;
unsafe class Test
{
    public delegate int* D(int i);
    static void Main()
    {
        Expression<D> tree = x => &x; // CS1944
    }
}

In alcune situazioni la presenza di puntatori nelle strutture ad albero dell'espressione è corretta. Si consideri ad esempio il seguente codice:

Expression<Func<int*[], int*[]>) e = (int*[] i)=>i;

Questo codice è una struttura ad albero dell'espressione valida perché nessun tipo di argomento è un tipo di puntatore. Si tratta di matrici di puntatori e le matrici non sono tipi di puntatore. Inoltre, il corpo della struttura ad albero dell'espressione non può danneggiare alcun puntatore.

Vedere anche

Riferimenti

unsafe (Riferimenti per C#)