CS1944 de erro do compilador

Mensagem de erro

Uma árvore de expressão não pode conter uma operação de ponteiro inseguro

Árvores de expressão não oferecem suporte a tipos ponteiro porque o Expression<TDelegate>.Compile método só é permitido para produzir código verificável. Consulte comentários.

Para corrigir este erro

  • Não use tipos ponteiro quando você está tentando criar uma árvore de expressão.

Exemplo

O exemplo a seguir gera 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
    }
}

Em algumas situações é já pode ter ponteiros em árvores de expressão.Por exemplo, considere o código a seguir:

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

Esse código é uma árvore de expressão válida porque não há argumentos de tipo são tipos ponteiro.Eles são matrizes de ponteiros e matrizes não são tipos de ponteiro.Além disso, o corpo da árvore de expressão não faz nada perigoso com qualquer ponteiro.

Consulte também

Referência

(referência C#) não seguros